git svn是dcommit atomic吗?

时间:2012-07-03 16:15:48

标签: git-svn

在我的公司,我们有一个subversion服务器,每个人都在他们的机器上使用subversion。 但是我想使用git,在本地提交更改,然后在我准备好时“推”它们。

但是,我无法理解在以下情况下会发生什么。 假设我在本地进行了3次git提交,现在我已准备好“推送”subversion服务器上的所有内容。如果我理解正确,git svn dcommit基本上应该在服务器上按顺序进行3次提交,对吗?但是,如果在此期间(让我们说在第二次和第三次提交之间)另一位同事发出提交,会发生什么? 我能想到的情景是:

1)在提交期间git类型的“锁”(甚至可能吗?)subversion服务器,以便我的提交以原子方式进行,而我的同事的一个在我的之后完成

2)服务器上的提交历史记录变为mine1-mine2-other-mine3(即使'其他'应该失败,因为我的同事当时没有更新的工作副本)。

我认为它是#2,但也许提交速度如此之高,以至于这很少成为一个问题。那么哪一个是#1还是#2?

2 个答案:

答案 0 :(得分:5)

Git不支持锁,它不是Git方式(Git方式是分支和merginig)。 使用git-svn,你将获得我的1-mine2-other-mine3历史。如果您需要原子性,请查看SubGit项目(它已安装到SVN服务器并为SVN存储库创建纯Git接口)。

最近有一个类似的question可能会让你感兴趣。

答案 1 :(得分:0)

如果你幸运的话就是2号,但大多数时候你并不那么幸运。根据我的经验,当我提交大量提交而其他人提交时,通常会发生两件事:

  1. 停止提交您的其他更改。
  2. 你丢失了尚未提交的提交。
  3. 2号真的很烦人。主要问题是你需要完全掌握使用git svn dcommit的最新信息。这是因为git-svn不允许服务器动态合并修订版。 (因为它需要两个提交者都有一个包含两个更改的工作树)。

    解决这个问题的唯一方法是我发现here

    的以下步骤
    1. 打开.git / logs / HEAD
    2. 查找您最近的提交(请注意,这些提交已排序 通过“unix time”,虽然你也可以通过阅读找到最新的 那里的短文
    3. 确认您找到的提交是正确的:git show
    4. git reset - 来自日志的哈希哈希
    5. git svn rebase
    6. git svn dcommit
    7. 按照此程序,您可以从失败的地方起飞。我希望他们尽快解决这个问题,但他们说这不是他们的优先事项。

      当然,如果你提交小组并且与服务器有快速连接,那么通常不会发生这种情况。 (我在积极工作和每天工作6个月时只得到2-3次。)