2013-07-26 3 views
2

컨텍스트 : 개발중인 애플리케이션에 Git을 사용하고 있습니다. 내 응용 프로그램은 내 자신의 필요에 맞게 패치 한 오픈 소스 라이브러리를 사용합니다. 이 오픈 소스 라이브러리는 SVN에 있습니다.Git에서 패치 된 오픈 소스 라이브러리를 유지하십시오.

문제 : 내 Git 저장소에서이 타사 구성 요소를 가져오고 유지 관리하는 방법을 찾고 있습니다. 패치를 업스트림으로 푸시 할 필요가 없습니다.

오픈 소스 라이브러리의 SVN 저장소는 매우 표준 적입니다.

trunk/ 
tags/ 
- v1/ 
- v2/ 
branches/ 

내 힘내 작업 복사본의 디렉토리 구조는 매우 간단합니다.

my_app/ 
lib/ 

v1 태그의 lib 소스 코드를 lib/에 어떻게 가져 옵니까?

dev 팀이 SVN 저장소에 태그 v2를 만들면 어떻게 라이브러리의 새 버전을 병합하거나 리베이스 할 수 있습니까? (당신이 역사를 필요로하지 않기 때문에) 나는 당신이 svn의 REPO를 수출하고 당신의 Git 저장소로 가져올 제안 그리고

# Create the open source library's SVN repo and its first tag. 
svnadmin create lib_svn_repo/ 
svn checkout "file:///${PWD}/lib_svn_repo/" lib_working_copy 
(cd lib_working_copy ; mkdir -p trunk tags branches ; svn add * ; svn commit -m 'Initialize SVN repo' ; cd trunk ; echo "print 'Hello v1'" >source.py ; svn add * ; svn commit -m 'Development for v1' ; cd .. ; svn up ; svn cp trunk/ tags/v1 ; svn commit -m 'Tag v1' ; sed --in-place 's/v1/v2/' trunk/* ; svn commit -m 'Development for v2') 

# Initialize my own project's git repository. 
mkdir my_app 
(cd $_ ; git init ; mkdir -p src lib ; touch src/.gitignore ; git add * ; git commit -m 'Initialize my app') 

# How to import the lib source code from tag v1 in the lib subdirectory??? 
# Expected: lib/ contains a source.py that displays "Hello v1". 

# Commit local changes in my git repo. 
(cd my_app/ ; echo "print 'My local modification'" >>lib/source.py ; git add * ; git commit -m 'Added local modification to the library') 

# Library dev team creates a tag v2. 
(cd lib_working_copy ; svn up ; svn cp trunk/ tags/v2 ; svn commit -m 'Tag v2') 

# How to merge or rebase lib/ on tag v2??? 
# Expected: lib/ contains a source.py file that displays both "Hello v2" and "My local modification". 
+0

svn repo의 기록을 유지 하시겠습니까? – Michael

+0

아니요, svn repo의 기록을 유지할 필요가 없습니다. 라이브러리 정보 팀이 새 SVN 태그를 만들 때 내 자식 정보 저장소가 lib/subproject_A를 병합하거나 리베이스하기에 충분한 정보가있는 한 만족합니다. – lacton

답변

1

:

상황의 구체적인 예를 보여주기 위해, 나는 bash는 스크립트를 생성 그냥 파일, 이것은 가장 쉽습니다.

외부 SVN 저장소의 태그 변경 사항을 모니터링하고 외부 svn 저장소에 기반한 diff를 패치로 git 저장소에 적용하십시오.

+1

똑똑 하네! 기본적으로 git은 라이브러리의 SVN 저장소와 관련된 모든 것을 인식하지 못합니다. 때때로 수시로 수동으로 패치되는 파일을 볼 수 있습니다. 유익한 커밋 메시지를 사용하여 어느 시점에서 사용중인 lib 버전을 쉽게 추적 할 수 있습니다. 나는 다소 실망스러운 자식이 더 좋은 통합을 제공하지 않는다는 것을 인정해야하지만, 당신의 솔루션은 내 문제에 대해 충분하다. 감사! – lacton

+1

당신은 git 솔루션으로 생각하고있는 것보다 더 많은 자식 서브 모듈을 체크 아웃 할 수 있습니다.하지만 사람들이 대부분의 사람들의 필요에 따라 svn 외부처럼 깨끗하지 않기 때문에 사람들을 서브 모듈로부터 멀리 떨어 뜨리는 경향이 있습니다. – Michael

관련 문제