2009-10-28 5 views
5

svn : externals의 사용을 비난하는 몇 가지 답변을 여기 읽었습니다. 어떻게 오용 될 수 있는지보고 Subversion에 더 의존하게 만들지 만, 조만간 우리 그룹이 그 자리를 떠나는 것을 보지 못합니다.svn 외부 ... 예 또는 아니요?

어쨌든, 여기 내 딜레마가 있습니다. 우리는 저장소의 자체 섹션에있는 여러 프로젝트를 참조하는 솔루션을 가지고 있습니다. 이러한 프로젝트 중 다수는 여러 솔루션간에 공유되며 우리는 또한 프로젝트 공유를 배제하고 싶지 않습니다. 우리는 또한 저장소 (단위 테스트 프레임 워크, 라이브러리 등)에 몇 가지 고정 버전 종속성을 확인했습니다.

개발자를 위해 솔루션을 구성하기 위해 외장 만 사용하는 '작업 공간'을 구성하고 싶습니다. (Subversion이 염려하는 한 빈 디렉토리이거나 어쩌면 단일 솔루션 파일이 포함될 수도 있습니다.) 대부분의 프로젝트를 자체적으로 체크 아웃하는 것만으로는 충분하지 않지만, 작업 공간을 체크 아웃하는 것은 빌드에 충분합니다. 왜냐하면 모든 의존성이 빌드되기 때문입니다. 다른 사람이 비슷한 솔루션을 구현했는지 svn : externals가이 문제를 해결하는 좋은 방법일까요? 우리가이 길로 내려 가면 내게 무슨주의가 있느냐?

기본적 구조는 (간결함을 위해 생략 트렁크/지점/태그)과 같습니다

/projects 
    /project1 
    /project2 
/dependencies 
    /xUnit 
     /1.5 
     /1.4 
    /NHibernate 
     /2.1.0 
     /2.0.1 
/workspaces 
    /project1 
     /project1 (external to ^/projects/project1) 
     /xUnit (external to ^/dependencies/xUnit/1.5) 
     /NHibernate (external to ^/dependencies/NHibernate/2.0.1) 
    /project2 
     /project2 (external to ^/projects/project2) 
     /xUnit (external to ^/dependencies/xUnit/1.4) 
     /NHibernate (external to ^/dependencies/NHibernate/2.1.0) 

답변

8

SVN Externals are Evil; Use Piston or Braid는 안티 - 외부 캠프의 전형적인 보인다. 포스터에는 요점이 있습니다.

더 좋은 기준은 생각 :

    변경할 수있는 내부 프로젝트에 대한
  • 를 사용하여 외부 참조;
  • 제어 할 수없는 외부 저장소의 경우 vendor branches을 사용하십시오.

그래서 svn 외부의 문제는 사람들이 공급 업체 지점의 대체품으로 사용하는 것으로 보입니다. 타사 레일스 플러그인의 맥락에서 여러 사람들이 불평하는 것을 보았습니다.

그래서 당신의 경우에,이 프로젝트가 모두 "내부"라고 가정하면, 외부 svn은 완벽하게 유효한 접근 방법이라고 생각합니다.

+2

해당 블로그 게시물에 대한 링크가 이동했음을 유의하십시오.이제 여기에 있습니다 : http://cobaltedge.com/svn-externals-are-evil-use-piston-or-braid – chrisrbailey

4

나는 이전 답변에 동의합니다. 외관을 사용하여 내 경험을 인프라 모듈 및 "트렁크가 아닌 라이브러리의 특정 태그 외부를 설정할 때"내부 라이브러리 우수한 솔루션입니다.

전적으로 외부에 기반한 작업 공간을 사용하고 외부를 프로젝트 자체에 직접 추가하지 않는 이유를 정확히 이해하지 못했습니다. 내 접근 방식은 당신이 SVN에 만들 모든 프로젝트가 체크 아웃되었을 때 "빌드 가능"해야한다는 것입니다. 내 접근 방식에서

는 저장소해야는 다음과 같습니다

/dependencies 
    /xUnit 
      /tags 
       /1.5 
       /1.6 
      /trunk 
    /NHibernate 
      /tags 
       /2.1.0 
       /2.0.1 
      /trunk 
/projects 
    /project1 
      /tags 
       /1.0 
        /sources 
        /xUnit(externals to /dependencies/xUnit/tags/1.5) 
        /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
      /trunk 
       /sources 
       /xUnit(externals to /dependencies/xUnit/tags/1.6) 
       /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
    /project2 
      /tags 
       /1.0 
        /sources 
        /xUnit(externals to /dependencies/xUnit/tags/1.6) 
        /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
      /trunk 
       /sources 
       /xUnit(externals to /dependencies/xUnit/tags/1.6) 
       /NHibernate(externals to /dependencies/NHibernate/tags/2.1.0) 
0

경우 svn:externals에만 제 3의 라이브러리, 왜 단순히 메이븐/아이비 저장소를 사용하지 참조? 이것들은 자바 세계를위한 것이고 나는 .Net pendents를 모른다. 그러나 나는 그들이 존재한다고 확신한다.

jar 아카이브에서로드 할 수있을 때까지 Ant Antlib 파일을 공유하는 데만 svn:externals 만 사용합니다.

관련 문제