2009-03-24 4 views
25

git-svn을 사용하여 일부 SVN 저장소의 "준비"버전을 저장합니다. 다른 사용자가이 준비 저장소에서 당겨서 다시 변경 사항을 커밋 할 수 있습니다. 스테이징 저장소의 커밋은 주기적으로 업스트림 SVN 저장소에 위임됩니다.git 커미터와 SVN 사용자 간의 매핑

git 커미터의 이름과 SVN 사용자 이름을 매핑하는 방법이 있는지 알고 싶습니다. SVN repo에 커밋 할 때 해당 정보가 손상되지 않도록 유지하고 싶습니다.

답변

24

Vincent Danenthe -A option when using git svn를 언급하지 :

은 그래서 authors.txt 파일을 만들고 Git 저장소 [...]의 최상위 디렉토리로/~ 자식을 사용.
이 파일은 Subversion 커미터의 이름을 힘내 작성자에게 매핑하므로 가져온 Subversion 저장소의 올바른 기록을 가져옵니다.
커미터 수가 적은 프로젝트의 경우 매우 간단합니다. 커미터가 많은 대규모 프로젝트의 경우 시간이 좀 걸릴 수 있습니다. 파일의 구문은 다음과 같습니다

user = Joe User <[email protected]> 
vdanen = Vincent Danen <[email protected]> 

짧은 이름이 망할 놈에 의해 사용되는 긴 형태, 사용자의 전체 이름과 이메일 주소 반면 서브 버전의 커미터 이름입니다.

Subversion 저장소를 복제하여 로컬 Git 저장소를 만드는 단계입니다. 저장소를 가정하면 트렁크 /의 표준을 사용,/태그, 및/지사, 사용 :

loginname = Joe User <[email protected]> 
:

# git svn clone --no-metadata -A authors.txt -t tags -b branches -T trunk https://svn.example.com/svn/repo 

-A<filename> 
--authors-file=<filename> 

구문 자식 - cvsimport 사용하는 파일과 호환됩니다

이 옵션을 지정하고 git-svn이 작성자에 존재하지 않는 SVN 커미터 이름을 발견하면 -file, git-svn은 작업을 중단합니다.
사용자는 적절한 항목을 추가해야합니다.
authors-file이 수정 된 후 이전 git-svn 명령을 다시 실행하면 작업을 계속 진행해야합니다. git-svn dcommit (당신이에 SVN을 를 누르면)를 포함

config key: svn.authorsfile 

이 모든 git-svn 명령에 대해 작동합니다

, (참고 : 내가 직접하지만 그것을 테스트하지 않았습니다).

Mohammed Gamal (코멘트에서) 작동하지만, --no-metadata 옵션이 없다고보고합니다.

+1

OP에서 물어 본 것처럼 git-> svn 방향에서도 작동합니까? –

+0

@Christoph : 그런데, 당신은 * Git repo (http://stackoverflow.com/questions/570945/git-clone-of-git-svn-tree/571084#571084)의 SVN 미러를 가지고 있습니다. --authors-file 옵션을 사용해야 했습니까? – VonC

+2

해결책은 작동하지만 --no-metadata 스위치가 없으면 –

1

두 번째 옵션은 매핑을 해결하는 프로그램/스크립트를 제공하는 것입니다.

커미터 수가 알려지지 않았지만 SVN 커미터 이름에서 "생성"되었을 수있는 경우 매우 유용합니다!

... authors-file에 존재하지 않는 SVN 커미터 이름 인 경우 git svn이 작업을 중단합니다. 사용자는 적절한 항목을 추가해야합니다. 다시 실행 저자 - 파일이 수정 된 후 그래서 ...

을 이전 자식 svn의 명령을, 그 때문에 우리는이 :

--authors-prog=mapMyCompanyUsers.sh 

힘을/컬 /를 wget'ting를 체크 아웃하는 모든 사용자를하지 않으려면

$ git svn clone -s --authors-prog=$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) https://svn.example.com/svn/repo/ 
:

$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) 

클론은 다음과 같이 표시됩니다지도 - 스크립트 첫째, 당신이 뭔가를 제공 할 수 있습니다

이렇게하면 모든 매핑이 정확히 같고 SVN 복제본이 "공유"되고 git을 통해 병합 될 수 있습니다!