如何修改git存储库以在过去的所有版本中添加子模块?

时间:2010-07-21 14:56:43

标签: git migration git-svn git-submodules git-filter-branch

我使用git svn-clone将我的SVN存储库成功迁移到Git中。但是,git svn-clone不会迁移svn:externals。因此,我决定使用git filter-branch修改分支树。

对于svn:externals,首先我为每个svn:externals创建了一个单独的Git存储库,然后我尝试使用以下内容,但它没有用。

$ git filter-branch --tree-filter "git submodule add git@github.com:myAcc/mySubmodule.git mySubmodule" HEAD
Rewrite a013a219e4294d4ee66b323cf1db9c170d90130a (1/4)fatal: working tree '.' already exists.
Clone of 'git@github.com:myAcc/mySubmodule.git' into submodule path 'common' failed
tree filter failed: git submodule add git@github.com: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 个答案:

答案 0 :(得分:1)

我认为你可以这样做,但有可能以更清洁的方式做到这一点:

  1. 创建临时空git存储库
  2. 将您的svn:external添加为子模块并提交;请注意此提交的SHA名称
  3. 进入旧存储库
  4. 来自临时存储库的
  5. git fetch
  6. git rebase <SHA of the only commit in the temporary repository>