我有一个开源项目的主要git存储库
我想将所有提交镜像到svn存储库(在code.google.com上),是否可能?
答案 0 :(得分:4)
是的,这是可能的。使用Git's SVN features导入存储库。然后你可以从那里推回去。你会发现,在大多数情况下,git可以有效地显示SVN历史,比SVN更能显示git历史。
答案 1 :(得分:3)
如果您的git历史记录是线性的,您可以尝试使用git-svn。 我会尝试使用“git svn clone”将现有的(空)SVN存储库导入git,然后将现有的git历史记录重命名为“git svn dcommit”。
如果您的git历史记录不是线性的(包含分支和合并),您将无法在SVN中正确表示它。在这种情况下,我强烈建议您使用基于git的托管解决方案(例如github.com)。
答案 2 :(得分:3)
我在目前的工作中遇到过这种情况。我们的主要Git存储库具有非线性历史记录,因此选定的解决方案应该处理这到目前为止似乎有效的解决方案基于gitsvn代理存储库。我在主Git存储库中安装了一个post-receive hook,它的核心是这样的:
export GIT_DIR=$GITSVN_PROXY_DIR/.git
git pull -Xtheirs file://$GIT_PRIMARY_DIR master
git svn dcommit
重写dcommit日志历史记录后。在主要Git存储库的下一个git pull中,你通常会遇到混乱冲突。这就是-Xtheirs选项的用武之地。这是一种有利于远程版本更改的合并策略。在这种情况下,它允许我们自动解决冲突! :)
唯一的缺点:漂亮的SVN提交消息不是免费提供的。需要一些git hacking来使它们包含来自主要Git提交消息的所有信息。
答案 3 :(得分:1)
我怀疑code.google.com是否可行,但您可以设置自己的Subversion存储库并在其中安装SubGit。
安装完成后,您将拥有一对链接的Subversion和Git存储库。任何存储库中的每个修改都会触发一个SubGit钩子,该钩子会自动转换所有必要的更改。
有关详细信息,请参阅documentation和git-svn comparison。
SubGit是一种商业产品,但对于开源项目,您可以获得免费许可。
答案 4 :(得分:0)
你签出了http://git-scm.com/docs/git-svn我不知道这是否能解决你的问题,但这是一种同步git和svn的方法。
-CJ