繁体   English   中英

将本地Git存储库与主Subversion存储库一起使用

[英]Use local Git repository with a master Subversion repository

我听说可以在开发人员计算机上安装本地Git存储库,同时保留存储在svn存储库中的源代码的主副本。

一个很好的用例是你有一个每个开发人员使用的中央svn存储库。 一位开发人员偶尔会离线,并希望跟踪他/她在离线时所做的更改。 当开发人员重新上线并可以访问svn时,他们的工作副本修改可以检入svn。 当文件被检入svn时,我很好地失去了Git本地发生的变化的历史。

有人可以概述如何最好地解决这个问题吗? 像这样工作有任何陷阱吗?

您可以使用类似本教程的内容作为起点。 我也读过这个教程

这种工作方式有几个陷阱。 最重要的一点是你不能使用svn 1.5版mergeinfo,并期望通过git生存。 如果你使用(可以说是相当不错的)svn 1.5合并功能,这是一个主要的缺点。

git-svn的手册页还包含了一些您应该理解的“警告”部分下的注释。 一旦我理解了所有警告,我就明白使用此设置的好处是低于我特定情况的实际成本。 所以我用自己的精力来说服项目转而使用git,这是我刚刚成功完成的事情。

假设您的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一样使用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 '
这些别名转工作流程,以纯效益: 克隆 / 砍砍 / spull / spush - > 利润

SVN:外部组件
我无法在互联网上找到一个好的解决方案,所以自己做了一个:)
http://github.com/sushdm/git_svn_externals它还不完美,但它应该能够让生活变得更加轻松。

非常适合我,希望它能帮到你。

我会尝试的一个解决方案是:

  1. 使用SVN从中央仓库结帐
  2. git init创建本地repo
  3. 将.svn添加到.gitignore
  4. git add *将所有文件添加到本地仓库
  5. 用git做你所有的中间分支/提交/恢复。
  6. 完成后,使用SVN返回中央仓库。

我认为git-svn更好的用例是你被迫使用中央svn存储库,但是你想亲自使用git。 或者也许团队中的大多数人现在更愿意使用svn。 使用git-svn,您不会丢失在本地git存储库中提交的提交历史记录。

如果您从头开始设置新的存储库和/或可以自由选择,我会选择其中一个。 git-svn运行良好,但你总是会对抗两个系统之间的“阻抗不匹配”。

如果它只是一个您希望实现的集中模型,那么公共git存储库可以用作中央存储库。 有关设置共享存储库的信息,请参阅Git用户手册部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM