2011-03-17 9 views
3

프로젝트의 개정 제어 소프트웨어로 git을 사용하고 있습니다. 내 프로젝트는 개정 관리 소프트웨어에 SVN을 사용하는 타사 코드 라이브러리를 사용해야합니다. (이 경우 제 3 자 코드는 Yii이라는 PHP 프레임 워크입니다. 질문과 관련이 없습니다.)git 프로젝트에 외부 svn 저장소를 어떻게 포함합니까?

SVN 저장소에서 코드를 가져 와서 최신 상태로 유지하는 데 도움이되는 git에서 외부 종속성을 설정하는 방법이 있습니까? 내가 한 때마다

> svn propset svn:externals yii-1.1.6 https://yii.googlecode.com/svn/tags/1.1.6/framework 

... 다음, a는 svn checkout (또는 svn update), 나는 아래로 빨아 것 : 내 프로젝트는 SVN을 사용하는 경우

, 내가 다만 때문에 설정하는 사소한 것 " yii-1.1.6"이라는 로컬 폴더에 yii 코드베이스. git에서 비슷한 작업을 수행 할 수 있습니까? 누구든지 내가 공개 할 수있는 공개 github 저장소에 예제가 있습니까? 나는 그것이 공통적 인 필요가 있어야한다고 확신합니까?

당신은 다음의 svn의 repo의 자식 - svn을 복제를 수행 할 수 있습니다

답변

6

submodule로 선언, 주 힘내의 repo에 그 REPO를 포함한다.

기억하십시오 : 자식 하위 모듈은 항상 고정 버전을 참조한다는 점에서 svn 하위 모듈과 호환되지 않습니다. 참조 : 나는 "git submodule tracking latest"에서 언급으로

그러나

, 당신은 자식 1.8.2 (2013 월) 부터 추적 할 수 있습니다 하위 모듈을 통해 저장소의 최신 지점.

$ git submodule add -b <branch> <repository> [<path>] 
$ git submodule update --remote ... 
+0

> "svn repo의 git-svn 복제본을 만들 수 있습니다."- 내 svn repo가 ​​아닌 문제는 제 3 자 repo입니다. – Tom

+1

그건 중요하지 않습니다. 'svn checkout '을 할 수 있다면'git-svn clone '도 할 수 있습니다. – joschi

+0

하위 모듈이 어떻게 [분기 추적] (http://stackoverflow.com/questions/9189575/git-submodule-tracking-latest), – Matt

2

또한 단지 SVN은 나무에 제 3 자 라이브러리를 체크 아웃 할 수있는 다음 자식이 당신의 주요 프로젝트에 (모든을 .svn 서브 디렉토리를 포함)에 추가합니다.

더러움뿐만 아니라 종류도 간단하고 직설적입니다.

업데이트가 필요할 때 svn update와 git commit 만 있습니다.

0

나는 직장에서 정확히 같은 상황에 처해있다. 나는 SmartGit을 사용한다. Git 저장소 루트에 .gitsvnextmodules 파일이 있습니다. 지정되지 않은 경우 (URL + 지점 값이 연결된) 개정 1234 (시 :

[submodule "anyString"] 
     path = path/to/svn/submodule 
     url = https://url.of.svn/repository/blah 
     revision = 1234 
     branch = branches/branch #or it can be "trunk" 
     fetch = trunk:refs/remotes/svn/trunk 
     branches = branches/*:refs/remotes/svn/* 
     tags = tags/*:refs/remote-tags/svn/* 
     remote = svn 
     type = dir 

SmartGit은 "//url.of.svn/repository/blah/branches/branch HTTPS"을 가리키는 서브 모듈로 표시 HEAD 개정이 사용됩니다). fetch + branches + tags는 .git/config 스펙과 같습니다.

타사 프로젝트의 분기를 신속하게 전환하고 싶지 않은 경우 (하위 모듈에 커밋하기를 원하므로) 대신 다음과 같이 사용하십시오.

[submodule "alternativeSubmodule"] 
     path = path/to/svn/submodule 
     url = https://url.of.svn/repository/blah/branches/branch 
     revision = 1234 
     branch =/
     fetch = :refs/remotes/svn/git-svn 
     remote = svn 
     type = dir 

자세한 내용은 .gitsvnextmodules specification.

이 구성의 경우 SmartGit은 일반적인 Git 하위 모듈과 동일한 방식으로 하위 모듈과 작동합니다.

관련 문제