使用本地Git仓库与主Subversion仓库连接

15

我听说可以在开发者的机器上建立本地Git仓库,同时保留源代码的主副本存储在svn仓库中。

一个很好的用例是你有一个中央svn仓库,每个开发者都与之配合工作。其中一个开发者偶尔会离线并希望跟踪他/她离线时所做的更改。当开发者重新联网并访问svn时,他们的工作副本修改可以被提交到svn中。当文件被提交到svn时,我不介意失去Git本地更改历史记录。

有人能概述一下如何最好地实现这一点吗?这样做有什么注意事项吗?

4个回答

4

假设你的SVN仓库在svn+ssh://username@svn_server/svn/your_repo
并且你的SVN仓库有一个“标准”的布局(主干,分支,标签) 以下是我几个月来使用的工作流程:
1. 'mkdir your_repo'
2. 'cd your_repo'
3. 'git svn clone -s svn+ssh://username@svn_server/svn/your_repo .'(注意点号)
4. [根据您的存储库大小等待一段时间:)]
现在你的GIT 'master'跟踪SVN主干
如果您正在某个分支上工作,则可以像通常使用git一样创建跟踪分支
5. 传统的hack hack hack
6. 使用'git svn fetch && git svn rebase'更新克隆
7. 使用'git svn dcommit'将更改“推送”到svn

更多好东西
在您的.gitconfig文件中定义以下便捷别名:
1. 别名 'spull' 代表 svn-pull,如下所示:'spull = !git svn fetch && git svn rebase'
2. 别名 'spush' 代表 svn-push,如下所示:'spush = !git svn dcommit'
这些别名可以让工作流程变得非常有效: clone/hack hack/spull/spush -> profit

svn:externals
我在互联网上找不到一个好的解决方案,所以自己做了一个 :)
http://github.com/sushdm/git_svn_externals 它还不完美,但肯定会让生活变得更加轻松。

对我来说完美地运行,希望它能帮助到你。


4
您可以使用类似于这个教程作为起点。我还阅读了这篇教程
这种工作模式存在一些陷阱。最重要的一个是,您不能使用svn版本1.5合并信息,并期望在git中保留。如果您正在使用(可以说相当不错的)svn 1.5合并功能,则这是一个巨大的缺点。
git-svn的手册页中,也包含了一些关于“注意事项”的笔记,您应该理解。一旦我理解了所有的注意事项,我就认识到使用这种设置的好处对于我的具体情况来说,成本要低于实际成本。因此,我把精力用于说服项目改用git,我最终取得了成功。

3

我建议尝试以下解决方案:

  1. 使用SVN从中央仓库检出代码
  2. 使用git init创建本地仓库
  3. 将.svn添加到.gitignore文件中
  4. 使用git add *将所有文件添加到本地仓库中
  5. 在git中进行所有中间分支/提交/还原操作
  6. 完成后,使用SVN提交回中央仓库。

1

我认为git-svn更好的使用场景是,如果你被迫与中央svn存储库一起工作,但你想个人使用git。或者也许团队中大多数人目前更喜欢使用svn。使用git-svn,您将不会失去在本地git存储库中进行的提交历史。

如果您正在从头开始设置新存储库和/或有自由选择,则应选择其中之一。git-svn工作得很好,但您始终会在两个系统之间进行“阻抗不匹配”的斗争。

如果您只是想实现集中式模型,则可以使用公共git存储库作为中央存储库。请参见Git用户手册中关于设置共享存储库的部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接