我在SVN中有2个分支-主干和释放(从主干分支)。 目的是将它们迁移到GIT中的SINGLE存储库中。
SVN(trunk)----->GIT(master)
SVN(release)---->GIT(release) - where GIT(release) has been branched from GIT(master)
此后,我们每天刷新相应的SVN源-> GIT目标分支,以作为临时的迁移窗口。
这可能吗?
如果可以,该如何实现?
答案 0 :(得分:2)
首先,对svn存储库进行备份(或两个)。
然后,安装svn2git。在MacOS上:
brew install ruby
gem install svn2git
或者在Debian上:
sudo apt-get install git-core git-svn ruby
sudo gem install svn2git
然后(可选,但建议)列出svn信息库中的所有作者:
svn log --quiet \
| grep -E "r[0-9]+ \| .+ \|" \
| cut -d'|' -f2 \
| sed 's/ //g' \
| sort \
| uniq
并创建一个authors.txt文件,将svn作者映射到您要在git中使用的帐户。
运行svn2git
:
mkdir new-git-repos
cd new-git-repos
svn2git path-to-svn-repos --no-minimize-url --authors path-to-authors.txt
验证新的git存储库(git log
,git tag
,git branch -a
等),如有必要,重命名分支和标记,还可以选择将新存储库推送到服务器。
有关更多食谱,请参见svn2git README.md。如果您有权访问svn主存储库,并且在转换为git之前需要对提交历史记录进行更复杂的重写,请使用svnadmin。
答案 1 :(得分:2)
如果您想同步运行SVN和Git一段时间,还可以查看SubGit。它会在SVN和Git之间创建一个双向镜像,因此新的SVN版本将自动推送到Git,反之亦然。
它具有灵活的映射设置,因此您可以指定哪个分支到达何处,并在需要时从同步中排除某些文件。
这是一种商业产品,但对于由10个Git提交者组成的小型团队是免费的。