버전 관리에는 응용 프로그램을 빌드하는 데 필요한 코드와 구성이 포함되어야합니다.
이것은 다음을 의미합니다.
짧은 시간 동안 소개 된 임시 항목 (예 : 버그의 위치를 정확히 지정하거나 언어의 기능을 실험하는 데 필요한 시간)은 버전 제어에 있어서는 안됩니다. 필요할 때까지 유지하십시오. 커밋 할 때 간단히 제거하십시오 .
특정 머신에 적합한 로컬 파일은 브랜치에 보관 될 수 있습니다.
랩톱을 도난 당하거나 바이러스로 인해 OS를 다시 설치해야 할 때이 모든 것을 다시 실행하는 것이 너무 고통 스럽기 때문에 로컬로 유지하지 않는 것이 좋습니다 (마지막으로 백업은 2 년 전에 완료 된 것으로 나타났습니다) .
다른 한편으로, 파일 구조에주의를 기울이십시오 : 로컬 설정은 압도적이 될 때까지 OK이며, 프로젝트에 참여하는 42 명의 개발자 모두의 모든 파일에서 한 번만 변경하도록합니다.
기계 사이의 특수성을 제거 할 기회를 찾으십시오. 다음을 의미 할 수 있습니다.
개발자 컴퓨터의 로컬 인스턴스를 대체하기 위해 개발자 SQL 서버에 대한 액세스 권한 제공
Pypi 또는 npm 과 같은 패키지 배포 서비스 를 공개 패키지 용으로 사용하고 자체 전용 패키지를 사내 패키지 용으로 사용
팀원에게 동일한 버전의 소프트웨어를 설치하도록 요청하십시오.
소프트웨어 업데이트를 최대한 투명하게하고
또는 한 번의 클릭으로 OS와 필요한 소프트웨어를 컴퓨터에 배포 할 수 있습니다 (모든 개발자가 선호하는 Vim vs. Emacs, Chrome vs. Firefox 등을 설치할 수있는 시간)
그래서:
프로젝트 파일. 현재 PC의 레이아웃을 반영하기 위해 경로를 편집해야 할 수도 있습니다.
모든 PC에서 동일한 레이아웃을 사용하지 않는 이유는 무엇입니까? 프로젝트 내 경로는 프로젝트 파일을 기준으로해야합니다. 즉, 프로젝트 위치는 중요하지 않습니다. 소프트웨어와 라이브러리의 버전은 일부 컴퓨터에만 나타나는 크립 틱 버그를 피하기 위해 동일하고 팀의 다른 구성원에게는 재현 할 수없는 것이 좋습니다.
예:
Visual Studio로 만든 프로젝트에서 다음을 찾을 수 있습니다.
파일 자체. 상대 경로는 내 컴퓨터에서 프로젝트가 있는지 여부에 관계없이 H:\Development\Hello World Project\
팀의 다른 구성원이 프로젝트를 체크 아웃했습니다 C:\Work\HelloWorld\
.
종속성, 즉 타사 및 사내 라이브러리 두 가지 유형 모두 NuGet에서 처리해야하므로 모든 충돌 관련 토론이 더 이상 사용되지 않습니다. 내가 보유한 라이브러리와 동일한 버전이 없으면 NuGet에 종속성을 업데이트하도록 요청하십시오. 그렇게 간단합니다 (잘 작동 할 때 항상 그런 것은 아닙니다).
사내 라이브러리를 개인 NuGet에도 보관하는 것이 중요합니다. 여러 개의 라이브러리를 공유 폴더에 저장하거나 팀을 통해 전자 메일로 보내면 무질서하고 우울한 CI 서버가됩니다.
설정. 팀이 동일한 설정을 공유하는 것이 중요합니다. 팀의 절반이 경고를 오류로 처리하기로 결정하고 팀의 절반이 그대로 경고를 유지하면 팀의 첫 번째 구성원은 개발자가 생성 한 경고를 팀의 두 번째 부분에서 제거하는 데 시간을 소비합니다.
유틸리티 관련 설정 팀 구성원 중 일부는 일부 유틸리티를 설치했지만 다른 일부는 설치하지 않았기 때문에 까다로울 수 있습니다.
동일한 툴셋을 설치하는 것이 좋습니다. 일부 프로그래머는 StyleCop을 사용하고 싶지만 다른 프로그래머는 사용하지 않으면 팀이 작업을 수행하지 못합니다. 일부는 코드 계약을 사용하지만 다른 계약은 사용하지 않는 경우 동일한 문제가 발생합니다.
메이크 파일. 예를 들어 디버깅 중에는 최적화를 해제해야하지만 CI 서버에는 최적화를 해제하지 않아도됩니다.
여러 개의 makefile을 버전 관리에 보관하십시오. CI 서버에서도 디버그 버전을 빌드하고 까다로운 버그가 발생하는 클라이언트로 푸시하는 것은 드문 일이 아닙니다.
더러운 못생긴 해킹. 예를 들어, 함수에 따라 무언가를 테스트하기 위해 함수 중간에 7을 반환하고 값이 7 인 것으로 의심됩니다.
처음에는 그러한 코드를 피할 것입니다. 무언가를 테스트하려면 단위 테스트를 사용하십시오. 디버깅 목적으로 일부 코드를 교체하는 데 실제로 몇 초가 걸리면 수행하십시오. 그러나 몇 분 안에이 코드를 제거하므로 커밋 할 필요가 없습니다.
설명 할 때 테스트를 작성해야합니다. 예를 들어, 다음을 확인하려는 경우 :
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
상수 temperature
보다 열등한 경우 예외가 발생 AbsoluteZero
하므로 코드 자체로 연주해서는 안됩니다. 대신 다음과 같은 단위 테스트를 작성하십시오.
- 코드를 자기 문서화하고
- 코드의 신뢰성을 높이고
- 위의 방법을 수정할 때 관리자가 회귀 테스트에 의존 할 수 있는지 확인하십시오.
- 동일한 테스트를 수행해야하는 다른 팀 개발자에게 제공하십시오.