我想使用GIT和SVN客户端访问存储库。我想象的一种方法是通过自动双向迁移:当用户推入GIT存储库时,它也在SVN存储库中被委托,反之亦然。
有什么工具可以帮助我做到这一点吗?
答案 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?