我想要使用GIT和SVN客户端访问存储库。我想通过自动双向迁移来实现这一点:当用户压入GIT存储库时,它也在SVN存储库中进行COMMIT,反之亦然。有什么办法可以同步GIT和Subversion版本库?
有什么工具可以帮助我做到这一点?
我想要使用GIT和SVN客户端访问存储库。我想通过自动双向迁移来实现这一点:当用户压入GIT存储库时,它也在SVN存储库中进行COMMIT,反之亦然。有什么办法可以同步GIT和Subversion版本库?
有什么工具可以帮助我做到这一点?
要做到这一点,最好的办法是使用git svn
作为Subversion客户端。这提供了Subversion存储库和Git存储库之间的双向集成。一旦你拥有一个Git仓库,你可以推送其他地方发布它。
我这样做定期,在工作中有一个Subversion版本库是“主”库中,并且我通常使用git svn
来访问它。有时候,如果我正在做的事情需要更多特定的Subversion功能,比如合并,我会使用常规的svn
客户端代替仓库。
当然一个更简单的方式做到这一点是有主仓库逗留颠覆,而是使用本地的git - svn的?
你可能会认为svn2git很容易导入svn到git,然后它的镜像ruby应用程序git2svn。
更多详细信息在this question。
正如在其他的答案中提到,“git svn
”是强制性的,但那些红宝石模块帮你尊重“颠覆分支/目录”,而不是让他们在Git的实际目录。
您可能还想看看这个解决方案:http://unethicalblogger.com/posts/2008/10/git_back_subversion_mostly_automagically_part_33,它用于同步git和subversion之间的repo,同时使用git和subversion的多个开发人员以及它们之间的代理来执行同步。
我有一个裸露的git中央回购+ SVN-混帐桥 - 用git SVN一个回购协议,在分支“当前”跟踪SVN和分支“gitcentral”
然后我使用更新后的跟踪Git仓库钩中央混帐回购这样的:
#!/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
这主要是时间,但工程...
我们的团队有完全一样的问题,有点实验后,我们设法拿出一个混帐颠覆桥同步我们的团队的Git仓库和企业Subversion版本库之间的变化。我们的git使用对其他Subversion用户是透明的。
的设置进行了更详细的描述https://github.com/mrts/git-svn-bridge。
我们已经在生产中使用了这种设置超过一年。
我想设置的最大警告是git仓库只跟踪SVN主干(或另一个单一分支),因此其他git分支将在合并到主干期间被压扁到一个提交。对我们来说这不成问题 - 我们使用短命任务分支并将它们视为轻量级的短暂“工作单元”,可以在单个块中进入主线 - 并将分支历史保留在git中。
这适用于单个用户,但对于任何尝试在团队的两个存储库之间建立实际桥梁的人来说,这是不够的。 git在本地进行的任何更改都会被git svn rebase每次重新应用,任何后续的git推送到另一个git存储库将会重复推送相同的更改。 – 2012-06-13 01:05:14