首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git svn dcommit是原子的吗?

git svn dcommit是原子的吗?
EN

Stack Overflow用户
提问于 2012-07-04 00:15:48
回答 2查看 212关注 0票数 5

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

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

1) git类的“锁”(这可能吗?)subversion服务器在提交期间执行,因此我的提交是原子执行的,而我同事的提交是在我的提交之后完成的

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

我认为它是第二个,但可能提交速度太快了,所以这很少成为问题。那么哪一个是1号还是2号呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-04 01:06:11

Git不支持任何锁,这不是Git方式(Git方式是分支和合并)。使用git-svn,您将获得mine1-mine2-other-mine3历史记录。如果您需要原子性,可以看看SubGit项目(它被安装到SVN服务器中,并为SVN存储库创建一个纯Git接口)。

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

票数 5
EN

Stack Overflow用户

发布于 2012-07-04 00:59:04

如果你很幸运,那么排名第二,但大多数时候你就没有那么幸运了。根据我的经验,当我提交了很多提交,而其他人同时提交的时候,通常会发生两件事:

  1. 它会在提交其他更改时停止。
  2. 您丢失了尚未提交的提交。

第二个真的很烦人。主要的问题是,您需要完全更新才能使用git svn dcommit。这是因为git-svn不允许服务器动态合并修订。(因为这将要求两个提交者都有一个包含两个更改的工作树)。

解决这个问题的唯一方法是我找到的here的以下步骤

  1. 打开.git/logs/HEAD
  2. 查找您最近的提交(请注意,这些提交是按“unix时间”排序的,不过您也可以通过阅读您找到的提交是正确的短日志there
  3. Confirm来查找最新的提交: git show
  4. git reset -- hash from log
  5. git svn rebase

<代码>H118git svn dcommit<代码>H219<代码>G220

遵循此过程可以让您从失败的地方开始。我希望他们能尽快解决这个问题,但他们说这还不是他们的优先事项。

当然,如果您通信的小组很小,并且连接到服务器的速度很快,那么这种情况就不应该经常发生。(在6个月的时间里,每天积极工作和承诺的时候,我只得到了2-3次)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11315049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档