有什么方法可以同步GIT和Subversion存储库吗?

时间:2009-05-25 20:11:07

标签: svn git version-control

我想使用GIT和SVN客户端访问存储库。我想象的一种方法是通过自动双向迁移:当用户推入GIT存储库时,它也在SVN存储库中被委托,反之亦然。

有什么工具可以帮助我做到这一点吗?

7 个答案:

答案 0 :(得分:20)

执行此操作的最佳方法是使用git svn作为Subversion客户端。这提供了Subversion存储库和Git存储库之间的双向集成。拥有Git存储库后,您可以将其推送到其他任何地方进行发布。

我经常这样做,在工作中有一个Subversion存储库是“主”存储库,我通常使用git svn来访问它。有时如果我正在做需要更多特定Subversion功能的事情,比如合并,我会使用常规的svn客户端代替存储库。

答案 1 :(得分:13)

有一种新的解决方案能够完全符合您的要求 - SubGit。它是并发安全的(我不能说基于git-svn的bash脚本)。

答案 2 :(得分:10)

我们的团队遇到了完全相同的问题,经过一些实验,我们设法建立了一个git-Subversion网桥,用于同步我们的团队git存储库和公司Subversion存储库之间的变化。我们的git用法对其他Subversion用户是透明的。

https://github.com/mrts/git-svn-bridge

更详细地介绍了设置

我们已在生产中使用此设置超过一年。

我想设置的最大警告是git存储库只跟踪SVN中继(或另一个单一分支),因此在合并到中继期间,其他git分支将被压缩为一个提交。对我们来说,这不是问题 - 我们使用短期任务分支,并将它们视为轻量级,短暂的“工作单元”,可以在一个块中转到主线 - 并且分支历史记录保留在git中。

答案 3 :(得分:5)

您可以考虑svn2git轻松将svn导入git,然后将其镜像ruby应用程序 git2svn this question中的更多详细信息 正如其他答案中所提到的,“git svn”是必需的,但是这些ruby模块可以帮助您尊重“subversion分支/目录”,而不将它们作为Git中的实际目录。

答案 4 :(得分:4)

您可能还想查看此解决方案:http://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33,用于同步git和subversion之间的repo,多个开发人员同时使用git和subversion,以及它们之间的代理进行同步。

答案 5 :(得分:4)

我有一个裸git中央回购+ SVN-git桥 - 一个带git svn的回购,跟踪分支'当前'中的SVN并跟踪分支'gitcentral'中的GIT存储库

然后我在中央git repos中使用post-update hook:

#!/bin/bash

# Anything inserted into GIT - move it back to SVN

echo
echo '* Pushing data into SVN branch'
cd /home/git/BRIDGE
unset GIT_DIR

# current - svn branch locally and central git branch on project.git repos
# centralgit - unmodified centralgit branch
git fetch /home/git/repositories/project.git/ master:centralgit || (echo "Error while pulling data into bridge repository"; exit 1)
git checkout -b temp centralgit || exit 2
git rebase current || exit 3
git checkout current || exit 4
git reset --hard temp || exit 5
git svn dcommit || exit 6
git branch -D temp || exit 7

echo '* Pushed correctly data into SVN'
exit 0

这主要是暂时的,但有效......

答案 6 :(得分:1)

当然,更简单的方法是将主存储库保留为Subversion,但在本地使用git-svn?