2009-05-25 81 views

回答

18

要做到这一点,最好的办法是使用git svn作为Subversion客户端。这提供了Subversion存储库和Git存储库之间的双向集成。一旦你拥有一个Git仓库,你可以推送其他地方发布它。

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

+12

这适用于单个用户,但对于任何尝试在团队的两个存储库之间建立实际桥梁的人来说,这是不够的。 git在本地进行的任何更改都会被git svn rebase每次重新应用,任何后续的git推送到另一个git存储库将会重复推送相同的更改。 – 2012-06-13 01:05:14

1

当然一个更简单的方式做到这一点是有主仓库逗留颠覆,而是使用本地的git - svn的?

4

你可能会认为svn2git很容易导入svn到git,然后它的镜像ruby应用程序git2svn
更多详细信息在this question
正如在其他的答案中提到,“git svn”是强制性的,但那些红宝石模块帮你尊重“颠覆分支/目录”,而不是让他们在Git的实际目录。

2

我有一个裸露的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 

这主要是时间,但工程...

12

有你想要的执行完全是一个新的解决方案--- SubGit。它是并发安全的(我不能说基于git-svn的bash脚本一样)。

+0

这看起来很有希望,谢谢。 – 2015-10-28 07:54:42

8

我们的团队有完全一样的问题,有点实验后,我们设法拿出一个混帐颠覆桥同步我们的团队的Git仓库和企业Subversion版本库之间的变化。我们的git使用对其他Subversion用户是透明的。

的设置进行了更详细的描述https://github.com/mrts/git-svn-bridge

我们已经在生产中使用了这种设置超过一年。

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

相关问题