推拉与拉动

Ame*_*ina 6 mercurial

背景:

我自己使用Mercurial作为单个用户来跟踪我对自己的代码所做的更改,我想我已经熟悉了基础知识.但是,我现在即将开始与我的实验室中的其他人一起开展软件项目,并希望确保我了解如何使用Mercurial与其他人正确共享代码.

我们的情况如下:我们在Linux集群中的共享卷(即不同的路径)中都拥有自己的存储库,并且我们都拥有对我们自己和彼此的存储库的读写访问权限.

我们可以将这两个存储库称为BobAlice的存储库,以便进行讨论.

我的理解是Bob和Alice分享他们的代码有多种方式,其中两种方法如下:

选项1:通过拉动共享

  • 每当他想看到她的变化时,鲍勃都会从爱丽丝那里出来
  • 同样,爱丽丝从鲍勃每当她希望看到他的变化.

选项2:通过推送共享

  • 每当他想与她分享他的变化时,Bob就会主动他的变化送到Alice的存储库中.
  • 同样,每当他想与她分享他的变化时,Alice都会主动她的变化送到Bob的存储库中.

问题:

我在线阅读Mercurial文档和教程的解释是,上面的第一个选项通常比第二个选项更受欢迎.我有一个问题是为什么?

上面的第二个选项会导致任何问题吗?如果Bob会发生什么提交到自己的仓库,同时还翘她的变化同时为Bob的仓库?

谢谢

Ry4*_*ase 4

两者都有效,但最终并不重要,因为推/拉不会为接收者执行update或,它只是将变更集移动到底层存储库中,而不是移动到工作目录中。merge

第一个选项,拉动,更常见,因为:

  • 通常,您没有对彼此的存储库的写入权限(并且可能不应该),并且通过拉取,您只需要对彼此的存储库进行读取访问
  • 当您将变更集推送给某人时,不会通知他们他们收到了新的变更集。他们不会发现它,直到他们运行hg summary(或hg headshg log) 然后他们必须这样做hg merge。因此,只要收件人必须采取明确的操作(检查和合并)来获取您的更改,他们也可能只是拉取和合并。这对他们来说不再是工作,对你来说则更少。

正如其他人指出的那样,存储库写查看将阻止在传入的推或拉操作期间提交。