2009-09-15 2 views
2

내가현재/벤더 지점에 필요합니까?

이 내가 VCS에 사용되는 C++ 코드베이스와 SVN 있습니다.

내 코드는 여러 타사 제품을 사용합니다. 우리는 각 제품의 다른 버전을 사용하고 다른 OS (Linux 및 Windows)에서 사용합니다.

타사 제품 (필수 ​​버전 포함)은 컴파일 컴퓨터에 있으며 컴파일 시간에 사용되므로 코드와 사용 된 타사 버전 간의 관계가 느슨하게 결합됩니다.

내가

을 원하는 내가이 상황을 변경하고 싶습니다. 아이디어는 svn vendor branch을 이용하는 것입니다. svn vendor branch에 설명 된 내용과 달리 타사 제품의 이진 버전을 저장하며 코드 자체는 저장하지 않습니다. 이것은 제 3 자 코드를 패치하지 않기 때문입니다.

svn:external은 타사 제품의 적절한 버전을 사용하는 데 사용됩니다. SVN 저장소의 여기 해골 : svn의 빨간 책에서

svn_repo/vendor/product1/OS1/ver1 <- mymodule using it 
     vendor/product1/OS2/ver1 <- mymodule using it 
     vendor/product1/OS1/ver2 
     vendor/product1/OS1/ver2 

     vendor/product2/OS1/ver1 
     vendor/product2/OS2/ver1 
     vendor/product2/OS1/ver2 <- mymodule using it 
     vendor/product2/OS1/ver2 <- mymodule using it 

     mymodule/ <- this is my actual code referring to a particular 
         products from vendor/ using svn:external 
     mymodule/vendor/product1/OS1 <- reference to vendor/product1/OS1/ver1 
     mymodule/vendor/product1/OS2 <- reference to vendor/product1/OS2/ver1 
     mymodule/vendor/product2/OS1 <- reference to vendor/product1/OS1/ver2 
     mymodule/vendor/product3/OS2 <- reference to vendor/product1/OS2/ver2 

질문

vendor branch 장에서, 예에서, 그래서 제 3 자 제품의 최신 버전을 포함/전류를 유지하기 위해 제안 우리는 다음과 같이 끝납니다.

repos/vendor/libcomplex/current - contains 1.1 
    repos/vendor/libcomplex/1.0 
    repos/vendor/libcomplex/1.1 

제 3 자 코드를 패치하지 않았기 때문에 현재 /를 유지 보수 할 필요가 없습니다. 이렇게하면 유지 관리가 필요해 보입니다. 따라서 svn에 보조 perl 스크립트 svn_load_dirs.pl이 함께 제공됩니다.

내 생각 엔 전류는 /에 필요합니다

  1. 는 다른 버전 releted svn을 한 후 비교 svn을 확인합니다.
  2. 측면으로 버전은 svn 저장소에서보다 효율적인 방법으로 저장됩니다.

정말 필요하지 않습니다.

따라서 현재/공급 업체 지점 처리를 안전하게 무시할 수 있습니까?

답변

4

우리가 제안한 것과 유사한 방식, 즉 공급 업체 바이너리를 저장소에 가져온 다음 svn : externals를 사용하여 해당 바이너리에 상대 경로 지정을 사용합니다. 그것은 잘 작동하고 나는 우리가 외부 저장소 의존성을 가지고있는 것을 좋아한다.당신은 심지어 단지 즉, 각 운영 체제에 대해 각 이진의 단일 사본을 유지 고려할 수

그냥 컨트롤러로 서브 버전을 사용하여 디렉토리 이름에 버전을 지정 잊었다. 이는 어쨌든 어쨌든해야 할 svn:externals 속성의 명시 적 개정 번호를 사용하여 수행됩니다.

그래서 SVN : 인 MyModule/벤더/제품 1에 외관은/OS1 XXX는 적절한 버전 인 MyModule 사용 함유 개정이다 -rXXX ^/벤더/제품 1/OS1로서 설정 될 것이다.

예를 들어, 우리의 도구 디렉토리에 우리는 NUNIT 바이너리가 있습니다. nunit이 새 버전을 출시하면 tools \ nunit을 업데이트하고 릴리스 세부 사항을 기록합니다. nunit을 참조하는 모든 프로젝트는 문제의 프로젝트에 대한 svn : externals 등록 정보의 개정 번호 만 변경하여 새 버전을 사용할 수 있습니다 (선택 사항). 모든 프로젝트 업데이트를 원하지 않을 경우, 그들은

2

나는 이것이 괜찮다고 말할 것이다. 이는 흔히 소스 코드가 없거나 유지하려는 타사 라이브러리의 일반적인 상황입니다. 이 경우에는 제품의 관점에서 이 소스 인이므로 원하는 바이너리 버전을 저장하는 것이 좋습니다.

1

예, 안전하게 지점에/전류를 처리 우회 할 수있다 : 아무것도하지 않습니다. 이 책에서 그들은 현재 /를 제 3 자 코드에 대한/트렁크로 사용하고 공급 업체로부터 가져온 릴리스로 태그를 지정합니다. 당신이 당신이 말하는 것처럼 로컬 변경을 유지할 수 있도록 '현재'디렉토리 및 svn_load_dirs를 사용

1

설계되었습니다. 한 버전에서 다음 버전으로 파일에 대한 지속적인 기록을 유지합니다. 이렇게하면 병합 프로세스가 기본에서 변경된 내용을 감지하고 트렁크에서 분기를 리베이스하는 것처럼 변경 사항을 유지할 수 있습니다. 그렇지 않은 경우 파일은 매번 새로운 것으로 간주되며이 '리베이스'는 새 비트를 병합하지 않고 파일을 완전히 대체하려고합니다.

바이너리를 처리하고 전혀 패치하지 않기 때문에 안전합니다. 무시해.

1

이 기사는 자체 공급 업체 지점 계획에 도움이되는 것으로 나타났습니다. 그러나 저축이 얼마나 중요한지 알기 위해 몇 가지 버전에 대해/current/folder를 작성하기로 결정했습니다. 오버 헤드의 가치가 없다면 나중에 삭제할 수 있다고 생각했습니다.

나는 다음 각 주요 버전에 대한 분기를 작성하고 지점에 패치를 적용,/현재/만 주요 릴리스를 게시하기로 결정했다. 마지막으로 각 결과 코드 레벨에 대한 태그. 이는 패치에 대한 벤더의 패턴 (버전의 세 번째 세그먼트는 동일하게 유지됨)은 필요한 파일 만 수정하고 모든 파일에 태그 (세 번째 세그먼트 변경)를 릴리스하는 패턴과 잘 맞습니다.

15.1.0.1901 
-> update trunk 
    -> copy trunk to new branches/15.1.0 
    -> copy branches/15.1.0 to tags/15.1.0.1901 
15.1.0.2233 
-> update branches/15.1.0 
    -> copy branches/15.1.0 to tags/15.1.0.2233 
15.1.1.3064 
-> update trunk 
    -> copy trunk to new branches/15.1.1 
    -> copy branches/15.1.1 to tags/15.1.1.3064 
15.1.0.3299 (bug fix for 15.1.0) 
-> update branches/15.1.0 
    -> copy branches/15.1.0 to tags/15.1.0.3299 

공급 업체 코드는 180메가바이트에 관한 대부분 몇 PDB 및 XML 파일과 3.5 DLL을 .NET. 나는 모든 DLL이 변경된 15.1.0에서 15.1.1로 갔던 트렁크에 대한 커밋에서도 공간 절약이 중요하다는 것을 알았습니다.

Version  -> size of repos/db/revs file 
15.1.0.2782 -> 19,076 KB 
15.1.0.2845 ->  78 KB 
15.1.0.2892 -> 130 KB 
15.1.0.2907 -> 981 KB 
15.1.0.2948 -> 1,021 KB 
15.1.1.2998 -> 3,334 KB (new branch) 
15.1.1.3064 -> 477 KB 

각 업데이트이었다 자체에 19메가바이트을 체크 가정, 나는까지 지금 대신 26메가바이트의 1백33메가바이트, 80 %의 비용 절감에 대한 것. 이제는 디스크 공간이 부족해도 Subversion은 확실히 컴팩트하게 관계없이 저장하는 훌륭한 일을합니다. 그러나 이것을 구조와 추가 복사 작업의 가치가있는 멋진 저축으로 간주합니다.

마일리지는 당연히 다를 수 있습니다. 필자의 경우 모든 역사 버전을 사용하는 것이 매우 유용합니다. 우리 팀은 각기 다른 버전의 공급 업체 소프트웨어를 사용하는 많은 고객을 지원합니다. 공급 업체가 어떤 파일을 변경했는지 알 수있는 법의학적인 가치는 패치가 우리의 개선 사항에 영향을 미치는지 여부를 예측하는 데 도움이됩니다.

관련 문제