在我的公司,我们有一个subversion服务器,每个人都在他们的机器上使用subversion。 但是我想使用git,在本地提交更改,然后在我准备好时“推”它们。
但是,我无法理解在以下情况下会发生什么。
假设我在本地进行了3次git提交,现在我已准备好“推送”subversion服务器上的所有内容。如果我理解正确,git svn dcommit
基本上应该在服务器上按顺序进行3次提交,对吗?但是,如果在此期间(让我们说在第二次和第三次提交之间)另一位同事发出提交,会发生什么?
我能想到的情景是:
1)在提交期间git类型的“锁”(甚至可能吗?)subversion服务器,以便我的提交以原子方式进行,而我的同事的一个在我的之后完成
2)服务器上的提交历史记录变为mine1-mine2-other-mine3(即使'其他'应该失败,因为我的同事当时没有更新的工作副本)。
我认为它是#2,但也许提交速度如此之高,以至于这很少成为一个问题。那么哪一个是#1还是#2?
答案 0 :(得分:5)
Git不支持锁,它不是Git方式(Git方式是分支和merginig)。 使用git-svn,你将获得我的1-mine2-other-mine3历史。如果您需要原子性,请查看SubGit项目(它已安装到SVN服务器并为SVN存储库创建纯Git接口)。
最近有一个类似的question可能会让你感兴趣。
答案 1 :(得分:0)
如果你幸运的话就是2号,但大多数时候你并不那么幸运。根据我的经验,当我提交大量提交而其他人提交时,通常会发生两件事:
2号真的很烦人。主要问题是你需要完全掌握使用git svn dcommit的最新信息。这是因为git-svn不允许服务器动态合并修订版。 (因为它需要两个提交者都有一个包含两个更改的工作树)。
解决这个问题的唯一方法是我发现here
的以下步骤按照此程序,您可以从失败的地方起飞。我希望他们尽快解决这个问题,但他们说这不是他们的优先事项。
当然,如果你提交小组并且与服务器有快速连接,那么通常不会发生这种情况。 (我在积极工作和每天工作6个月时只得到2-3次。)