어려운 경험은 거의 모든 것이 소스 제어에 속 한다고 가르쳐주었습니다 . (내 의견은 독점적이며 때로는 찾기 어려운 도구가있는 독점적 인 하드웨어에서 임베디드 / 텔레콤 시스템을 개발하기 위해 10 년 반 동안 채색되었습니다.)
여기에 대한 답변 중 일부는 "이진을 소스 제어에 두지 마십시오"라고 말합니다. 그건 틀렸어요. 많은 타사 코드와 공급 업체의 많은 이진 라이브러리가있는 제품을 작업 할 때는 이진 라이브러리를 체크인하십시오 . 그렇지 않으면 언젠가는 업그레이드 할 것이며 문제가 생길 수 있습니다. 빌드 머신에 최신 버전이 없기 때문에 빌드가 중단됩니다. 누군가 새 사람에게 오래된 CD를 설치할 수있게합니다. 프로젝트 위키에는 설치할 버전에 관한 오래된 지침이 있습니다. 더 나쁜 것은 여전히 문제입니다. 특정 문제를 해결하기 위해 공급 업체와 긴밀히 협력 해야 하고 일주일에 5 개의 라이브러리 세트를 보내면어떤 바이너리 세트가 어떤 행동을 보이는지 추적 할 수 있습니다. 소스 제어 시스템은 해당 문제를 정확하게 해결하는 도구입니다.
여기에 대한 답변 중 일부는 "툴체인을 소스 제어에 두지 마십시오"라고 말합니다. 나는 그것이 틀렸다고 말하지는 않지만 당신이 그것에 대한 견고한 구성 관리 (CM) 시스템이 없다면 툴체인을 소스 제어에 두는 것이 가장 좋습니다 . 다시 한 번 위에서 언급 한 업그레이드 문제를 고려하십시오. 더 나쁘게도, 나는 고용되었을 때 주위에 떠 다니는 4 가지 툴 체인의 풍미가있는 프로젝트를 진행했습니다. 모두 적극적으로 사용합니다 ! 내가 한 첫 번째 작업 중 하나 (빌드를 빌드 한 후)는 툴체인을 소스 제어하에 두었습니다. (견고한 CM 시스템의 아이디어는 희망을 초월했습니다.)
프로젝트마다 다른 툴체인이 필요한 경우 어떻게됩니까? 적절한 사례 : 2 년 후 프로젝트 중 하나가 공급 업체로부터 업그레이드를 받고 모든 Makefile이 중단되었습니다. 그들이 최신 버전의 GNU make에 의존하고 있음이 밝혀졌습니다. 그래서 우리 모두 업그레이드되었습니다. 다른 프로젝트의 Makefile이 모두 고장났습니다. 교훈 : GNU make의 두 버전을 모두 커밋하고 프로젝트 체크 아웃과 함께 제공되는 버전을 실행하십시오.
또는 다른 모든 것을 통제 할 수없는 곳에서 작업하는 경우 "이봐 요, 새 사람이 오늘 시작합니다. 컴파일러 용 CD는 어디에 있습니까?"와 같은 대화가 있습니다. "Dunno, Jack이 종료 한 이후로 그들을 보지 못했다. 그는 CD의 수호자였다." "아, 우리가 2 층에서 이사하기 전에는 아니 었어?" "어쩌면 그들은 상자 또는 무언가에있을 수 있습니다." 이 도구는 3 년이 되었기 때문에 공급 업체로부터 오래된 CD를 얻을 희망은 없습니다.
모든 빌드 스크립트 는 소스 제어에 속합니다. 모두! 환경 변수에 이르기까지. 빌드 머신은 프로젝트 루트에서 단일 스크립트를 실행하여 프로젝트 빌드를 실행할 수 있어야합니다. ( ./build
합리적인 표준입니다. ./configure; make
거의 비슷합니다.) 스크립트는 필요에 따라 환경을 설정 한 다음 제품을 빌드하는 도구 (make, ant 등)를 실행해야합니다.
그것이 너무 많은 일이라고 생각한다면 그렇지 않습니다. 실제로 많은 작업을 저장합니다. 처음에 파일을 한 번 커밋 한 다음 업그레이드 할 때마다 커밋합니다. 어떤 늑대도 자신의 컴퓨터를 업그레이드하고 최신 버전의 도구에 의존하는 많은 소스 코드를 커밋하여 다른 사람의 빌드를 깨뜨릴 수는 없습니다. 새로운 개발자를 고용 할 때 프로젝트를 확인하고 실행하도록 개발자에게 지시 할 수 있습니다 ./build
. 버전 1.8에 많은 성능 조정이 있고 코드, 컴파일러 플래그 및 환경 변수를 조정할 때 새 컴파일러 플래그가 실제로 코드 가 필요 하기 때문에 버전 1.7 패치 빌드에 실수로 적용되지 않도록하려는 경우 그들과 함께 변경 또는 일부 털이 경쟁 조건을 참조하십시오.
무엇보다도 , 언젠가는 엉덩이를 구할 것입니다. 월요일에 제품의 3.0.2 버전을 배송한다고 상상해보십시오. 만세, 축하해 화요일 아침, VIP 고객은 지원 핫라인에 전화를 걸어 18 개월 전에 배송 한 버전 2.2.6의이 긴급하고 긴급한 버그에 대해 불평 합니다. 그리고 여전히 계약 상으로 지원해야하며 버그가 새로운 코드에서 수정되었다는 것을 확인할 수있을 때까지 업그레이드를 거부하고 춤을 출 수있을만큼 큽니다. 두 개의 병렬 유니버스가 있습니다.
소스 제어에 라이브러리, 툴체인 및 빌드 스크립트가없고 견고한 CM 시스템이없는 우주에서 ... 올바른 코드 버전을 확인할 수 있지만 빌드하려고 할 때 모든 종류의 오류가 발생합니다. 우리가 5 월에 도구를 업그레이드 했습니까? 아니, 그건 도서관 이었어 좋아, 오래된 도서관으로 돌아 가라-잠깐, 두 가지 업그레이드가 있었습니까? 아 그래, 조금 좋아 보인다. 그러나 이제이 이상한 링커 충돌은 익숙해 보입니다. 이전 라이브러리가 새로운 툴체인에서 작동하지 않았기 때문에 업그레이드해야했습니다. (나머지 노력의 고통을 아끼지 않을 것입니다. 2 주가 걸리며 고객이 아니라 경영진이 아니라 고객이 아닌 그 누구도 행복하지 않습니다.)
모든 것이 소스 제어에있는 유니버스에서는 2.2.6 태그를 확인하고 한 시간 내에 디버그 빌드를 준비한 다음 하루 또는 이틀 동안 "VIP 버그"를 다시 작성하고 원인을 추적하여 원인을 수정하십시오. 현재 버전으로 업그레이드하고 고객에게 업그레이드하도록 유도합니다. 스트레스는 있지만 헤어 라인이 3cm 더 높은 다른 우주만큼 나쁘지는 않습니다.
그렇게 말하면 너무 멀리 가져갈 수 있습니다.
- "골드 카피"가있는 표준 OS 설치가 있어야합니다. 아마 README에, 그것을 문서화 입니다 미래 세대가 해당 버전 2.2.6을 알고 이전에만 RHEL 5.3 및 2.3.0에 내장 된 이후에만 우분투 11.04에 내장되도록, 소스 제어에. 이 방법으로 툴체인을 관리하는 것이 더 쉬운 경우, 신뢰할 수있는 시스템인지 확인하십시오.
- 프로젝트 문서는 소스 제어 시스템에서 유지 관리하기가 번거 롭습니다. 프로젝트 문서는 항상 코드 자체보다 우선하며 현재 버전의 코드를 작업하는 동안 다음 버전의 문서를 작성하는 것은 드문 일이 아닙니다. 특히 모든 프로젝트 문서가 이진 문서 인 경우 diff하거나 병합 할 수 없습니다.
- 빌드에 사용 된 모든 버전을 제어하는 시스템이 있다면 그것을 사용하십시오 ! 모든 팀 (빌드 머신 포함)이 동일한 도구 세트에서 끌어 올 수 있도록 전체 팀에서 쉽게 동기화 할 수 있도록하십시오. (데비안의 pbuilder와 같은 시스템을 생각하고 파이썬의 virtualenv를 책임감있게 사용하고 있습니다.)