2010-11-21 5 views
8

인간 쓰기 소스 코드전화 : 버전 관리 및 바이너리

개정 제어 (간부를 소스 코드의 변경

도구 프로세스 소스 코드를 기록하고 기계 판독 물건을 생성하는 데 사용됩니다 , libs, GUI 코드 등)

때로는 도구 ' 출력 (예 : ARM 용 베타 릴리스의 저장 실행 파일)의 사본을 저장하고 싶습니다. 나는 도구 ' 출력을 수동으로 저장할 수 있습니다.이 출력에는 개정 관리 기록 (예 : 태그 이름 사용)의 요점을 반영하는 이름이 있습니다. 이것은 어색하고 오류가 발생하기 쉬운 것 같습니다.

나는 2 가지로 통찰력을 싶습니다

  1. 어떤 개정 이력 그래프의 특정 위치에 저장 도구 - 생성 된 출력에 개정 컨트롤을 사용의 장점/단점은? 대안으로 비 RCS 도구를 사용합니까? 수은, 자식의

  2. 는 도구가 생성 한 특정 버전에서 출력되지 다른 사람

+1

참조 http://stackoverflow.com/questions/3927571/for-binary-files-should-i-use-bfiles-or-bigfiles/3928194#3928194 또는 http://stackoverflow.com/questions/3990449/ 내가 원하는 - 바이너리 파일 - 미디어 - 내 - 코드 - 리포지토리 - 그만한 가치가있는 - 바이너리 - 파일/3994369 # 3994369. – VonC

답변

8

내가 바이너리 버전 제어에서의 소스 코드와 함께 저장되지해야한다고 생각합니다를 포함하는 가장 좋은 방법은 무엇입니까.

단점 : 대형 프로젝트에

  • 가 권장 나쁜 빌드 관행. 가장 좋은 방법은 전체 컴파일 (소스 컴파일뿐만 아니라 자동화 된 테스트 실행, 문서 패키징, 설정 등)을 완전히 자동화하는 것입니다. 바이너리를 커밋하면 "변경된 부분에 대한 빌드를 수동으로 수행합니다"라는 것을 무시할 수 있습니다.
  • 느린 업데이트와 바이너리 파일에 갈등이 빌드를 변경 소스 코드
  • 커밋을 수행 한 후 업데이트가 아니라 해당 바이너리가 개발자들 사이에서 혼란을 일으킬 각 시간을 처리하는
  • 필요성을 얻어냅니다. 불일치가 있음을 어떻게 감지합니까?
  • svn update은 바이너리의 타임 스탬프를 업데이트하므로 바이너리가 소스 코드가 변경된 것보다 새로운 것으로 잘못 생각하는 빌드 도구를 혼동 할 수 있습니다.
  • 저장소에서 더 많은 디스크 공간을 사용합니다. (프로젝트에 따라 무시해도 좋습니다.)

일반적으로 다른 버전 관리 된 리소스에서 결정적으로 자동 생성되는 것은 커밋하지 않는 것이 좋습니다. 중복성 없음 - 불일치에 대한 기회 없음.

대신 연속 통합 서버를 사용하여 각 커밋에 대해 자동으로 재구성 (및 테스트 실행)하십시오. 이 빌드 서버가 필요하면 네트워크의 공유 폴더처럼 바이너리를 어딘가에 (SVN 외부) 퍼블리시합니다.

+0

"Nightly build setup + archiving"계획에 +1 –

4

특히 이진 파일을 DVCS (예 : git 및 Mercurial)와 믹싱하지 않는 것이 좋습니다. 주된 이유는 병합 불가 파일이 DVCS에 문제가 있다는 것입니다.DVCS는 근본적으로 작동 할 DVCS 개념에 대한 파일의 고품질 병합에 의존합니다 (this discussion on binary files in git 참조).

이진 파일을 저장하는 데 동의합니다. 그러나 소스 버전 제어 시스템과 다른 위치에 저장해야합니다. 아마도 쓰기 권한이 제어 된 서버 일 것입니다. 모든 기록을 보존하려면 Subversion과 같은 중앙 집중식 VCS 저장소를 분리하십시오.

당신이 말한 것처럼 이러한 분리가 "어색하고 오류가 발생하기 쉬운"것을 피하려면 가능한 한 많이 자동화하십시오. 소스의 버전이 지정되었거나 태그가 지정되고, 빌드가 완료되고 출력 (적절한 이름이 지정되었거나, 버전이 지정되었거나, 태그가 지정된 경우 등)이 지정된 저장소에 저장되도록하는 자동 빌드 프로 시저를 만듭니다.