我有一个存储库,其布局如下:
trunk/ projectA projectB branches/ projectA-1.0 projectB-1.0 tags/ projectA-1.0.1 projectB-1.0.1
我想将它们转换为单独的git存储库,其中trunk/projectA作为顶级目录,所有它的分支作为git branches.
每当我尝试指定git svn init
类似内容时git svn init -T trunk/projectA -b branches -t tags http://svn.example.com
,后续操作git svn fetch
就会在不同的版本上神秘地失败.有时它会一直到200,有时会停止.
我目前的想法是,我应该创建一个git存储库,它将整个subversion存储库镜像为一个单独的实体,每个项目都有子目录.然后我会用git-filter-branch
子目录重写到项目的根目录.
但是,我不确定如何使分支表现得像我想要使用git-filter-branch
和.
另外,理想的做法是为每个项目的"主干"创建一个具有不同分支的单个git仓库,在这种情况下我没有问题没有真正拥有主人.
您是否考虑使用svn2git将svn导入git存储库?
这比git svn clone
在svn中有这个代码更好 :
trunk ... branches 1.x 2.x tags 1.0.0 1.0.1 1.0.2 1.1.0 2.0.0
git-svn
将通过提交历史记录来构建一个新的git repo.
它将所有分支和标签导入为远程svn分支,而你真正想要的是git-native本地分支和git标记对象.
因此,在导入此项目后,您将获得:
$ git branch * master $ git branch -a * master 1.x 2.x tags/1.0.0 tags/1.0.1 tags/1.0.2 tags/1.1.0 tags/2.0.0 trunk $ git tag -l [ empty ]
在你的项目完成svn2git后,你会得到这个:
$ git branch * master 1.x 2.x $ git tag -l 1.0.0 1.0.1 1.0.2 1.1.0 2.0.0
最后,它确保master的HEAD与svn repo的当前主干相同.
所以在你的情况下,它会给你实际的git分支来申请git-filter-branch
.