我听说可以在开发人员计算机上安装本地Git存储库,同时保留存储在svn存储库中的源代码的主副本。
一个好的用例是你有一个每个开发人员都使用的中央svn存储库。一位开发人员偶尔会离线,并希望跟踪他/她在离线时所做的更改。当开发人员重新上线并可以访问svn时,他们的工作副本修改可以检入svn。当文件被检入svn时,我很好地丢失了Git本地发生的变化的历史。
有人可以概述如何最好地解决这个问题吗?像这样工作有任何陷阱吗?
答案 0 :(得分:4)
您可以使用this tutorial之类的东西作为起点。我还阅读了this tutorial。
这种工作方式存在一些缺陷。最重要的一点是你不能使用svn 1.5版mergeinfo,并期望通过git生存。如果你使用(可以说是相当不错的)svn 1.5合并功能,这是一个主要的缺点。
git-svn的手册页还包含您应该了解的“警告”部分下的一些注释。一旦我理解了所有警告,我就明白使用此设置的好处是低于我特定情况的实际成本。所以我用自己的精力说服项目转而使用git,这是我刚刚成功完成的事情。
答案 1 :(得分:4)
说你的SVN回购位于 svn + ssh://用户名@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'主人'跟踪SVN中继线
如果你在某个分支上工作,你也可以建立一个跟git一样的跟踪分支
5.传统的 hack hack hack
6.使用' git svn fetch&&更新您的克隆git svn rebase '
7.使用' git svn dcommit '
更好的东西
在.gitconfig中定义以下方便的别名:
1.别名' spull '代表svn-pull,如下所示:' spull =!git svn fetch&& git svn rebase '
2.别名' spush '代表svn-push,如下所示:' spush =!git svn dcommit '
这些别名将工作流程转变为纯粹的有效性:
克隆 / hack hack / spull / spush - >的利润强>
<强>的svn:外部对象强>
我无法在互联网上找到一个好的解决方案,所以自己做了一个:)
http://github.com/sushdm/git_svn_externals它还不完美,但应该明确地让生活变得更加轻松。
非常适合我,希望它可以帮到你。
答案 2 :(得分:3)
我会尝试的一个解决方案是:
答案 3 :(得分:1)
我认为git-svn更好的用例是你被迫使用中央svn存储库,但你想亲自使用git。或者也许团队中的大多数人现在更愿意使用svn。使用git-svn,您将不会丢失在本地git存储库中提交的提交历史记录。
如果您从头开始设置新的存储库和/或可以自由选择,我会选择其中一个。 git-svn运行良好,但你总是会对抗两个系统之间的“阻抗不匹配”。
如果它只是一个您希望实现的集中模型,那么公共git存储库可以用作中央存储库。请参阅setting up a shared repository上的Git用户手册部分。