2010-07-21 3 views
2

내 SVN 저장소를 git svn-clone을 사용하여 Git으로 성공적으로 마이그레이션했습니다. 그러나 git svn-clonesvn:externals을 마이그레이션하지 않습니다. 그래서 git filter-branch을 사용하여 가지 트리를 수정하기로 결정했습니다.지난 리비전에 서브 모듈을 추가하기 위해 git 리포지토리를 수정하는 방법은 무엇입니까?

svn:externals의 경우 먼저 각 svn : externals에 대해 별도의 Git 저장소를 만들고 다음을 사용하여 시도했지만 작동하지 않았습니다.

$ git filter-branch --tree-filter "git submodule add [email protected]:myAcc/mySubmodule.git mySubmodule" HEAD 
Rewrite a013a219e4294d4ee66b323cf1db9c170d90130a (1/4)fatal: working tree '.' already exists. 
Clone of '[email protected]:myAcc/mySubmodule.git' into submodule path 'common' failed 
tree filter failed: git submodule add [email protected]:myAcc/mySubmodule.git mySubmodule 
rm: cannot remove `c:/myRepo/.git-rewrite/revs': Permission denied 
rm: cannot remove directory `c:/myRepo/.git-rewrite': Directory not empty 

어떤 방법을 생각 하나? 많은 감사드립니다.

+1

는 자식 submodules' 정확히 SVN'의 동등한없는'잊지 마세요 : 외관을 ': http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221 – VonC

+0

경고를 보내 주셔서 감사합니다. 나는'자식 서브 모듈'이 실제로 커밋을 가리킨다는 사실을 간과했다. 이 경우 확실하지 않아, 그것은 나를위한 옵션입니다. 한 번 업데이트 할 때마다 하위 모듈을 HEAD로 지정하고 싶습니다. – shadangi

답변

1

난 당신이 이런 식으로 할 수 있다고 생각하지만, 깨끗한 방법으로 그것을 할 수있을 수 있습니다 :

  • 이 서브 모듈로에 svn:external의를 추가하고 커밋

    1. 작성 일시 빈 자식 저장소 ; 이것의 SHA 이름이 임시 저장소에서 기존 저장소
    2. git fetch
    3. 이동을 저지주의하는 것은
    4. git rebase <SHA of the only commit in the temporary repository>
  • +0

    사실, 그게 나쁜 esp 소리하지 않습니다. SVN repo를 Git으로 마이그레이션하려고 할 때. 당신이 그것을 반복해서하지 않기 때문에. 하지만 지금, 내 큰 문제는 자식 서브 모듈 자체에 있습니다. 서브 모듈을 특정 모듈이 아니라 특정 커밋이 아닌 곳으로 향하게하고 싶습니다. 어떤 통찰력? – shadangi

    +0

    AFAIK, 하위 모듈은 항상 특정 커밋을 가리키며 HEAD를 가리킬 수 없습니다. – svick