我有一个存储库,其布局如下:
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
的{{1}}时,后续git svn init -T trunk/projectA -b branches -t tags http://svn.example.com
就会在不同版本上神秘失败。有时它会一直到200,有时会停止。
我目前的想法是,我应该创建一个git存储库,它将整个subversion存储库镜像为一个单独的实体,每个项目都有子目录。然后我会使用git svn fetch
将子目录重写为项目的根目录。
但是,我不确定如何使用git-filter-branch
和。{/ p>让分支表现得像我想要的那样。
同样最理想的是为每个项目的“主干”创建一个具有不同分支的单个git仓库,在这种情况下我没有问题没有真正的主人。
答案 0 :(得分:5)
您是否考虑 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
。
答案 1 :(得分:0)
我最终做的是克隆存储库的根目录并为每个项目复制新的git repo并重新安排事情。它不干净或漂亮,但它是遗留代码,我不再需要经常查看。