Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:开发人员处理单独的文件夹,为什么他们总是要合并_Mercurial - Fatal编程技术网

Mercurial:开发人员处理单独的文件夹,为什么他们总是要合并

Mercurial:开发人员处理单独的文件夹,为什么他们总是要合并,mercurial,Mercurial,我有四个开发人员在mercurial repo中的四个独立源文件夹中工作。为什么他们总是要合并,并用合并变更集污染回购协议?这让他们很恼火,也让我很恼火 有更好的方法吗?Mercurial是分布式的,这意味着如果您有一个中央存储库,那么每个开发人员的工作站上都有一个私有存储库,当然还有一个工作副本 现在让我们假设他们做了一个更改并将其提交,即提交到他们的私有存储库。当他们想要推动时,可能会发生两件事: 或者他们是第一个在中央服务器上推送新变更集的人,那么就不需要合并,或者 或者其他人,从同一版

我有四个开发人员在mercurial repo中的四个独立源文件夹中工作。为什么他们总是要合并,并用合并变更集污染回购协议?这让他们很恼火,也让我很恼火

有更好的方法吗?

Mercurial是分布式的,这意味着如果您有一个中央存储库,那么每个开发人员的工作站上都有一个私有存储库,当然还有一个工作副本

现在让我们假设他们做了一个更改并将其提交,即提交到他们的私有存储库。当他们想要推动时,可能会发生两件事:

  • 或者他们是第一个在中央服务器上推送新变更集的人,那么就不需要合并,或者
  • 或者其他人,从同一版本开始,在他们之前承诺并推动了。我们可以看到这里有一个分叉:从同一个起点出发,Mercurial有两个不同的方向,因此需要合并,即使没有冲突,因为我们不希望中央服务器上有四个不同的上下文(顺便说一句,Mercurial也可以这样做,它们被称为heads,你可以在不合并的情况下强制推送,但你仍然有分歧,没有魔力,这可能不是你想要的,因为你想检查所有贡献的总和……)
现在,如何避免执行合并非常简单:您需要告诉开发人员在提交自己的更改之前集成其他更改:

$ hg pull
$ hg update
$ hg commit -m"..."
$ hg push
对最新的中心版本进行提交时,不需要合并。 如果他们在同一代码上工作,那么在拉取和更新之后,也需要运行一些测试,以确保在其他开发人员集成工作时,隔离工作的仍然工作。频繁地接受其他人的贡献和推动我们自己的更改也被称为持续集成,并确保集成问题很快就会被发现

希望能有所帮助。

Mercurial是分布式的,这意味着如果您有一个中央存储库,那么每个开发人员的工作站上都有一个专用存储库,当然还有一个工作副本

现在让我们假设他们做了一个更改并将其提交,即提交到他们的私有存储库。当他们想要推送时,可能会发生两件事:

  • 或者他们是第一个在中央服务器上推送新变更集的人,那么就不需要合并,或者
  • 或者其他人,从同一个版本开始,在他们之前承诺并推动了。我们可以看到这里有一个分叉:从同一个起点,Mercurial有两个不同的方向,因此需要合并,即使没有冲突,因为我们不希望在中心s上有四个不同的不同上下文服务器(顺便说一句,Mercurial可以使用它,它们被称为heads,您可以在不合并的情况下强制推送,但您仍然有分歧,没有魔力,这可能不是您想要的,因为您希望能够检查所有贡献的总和…)
现在,如何避免执行合并非常简单:您需要告诉开发人员在提交自己的更改之前集成其他更改:

$ hg pull
$ hg update
$ hg commit -m"..."
$ hg push
对最新的中心版本进行提交时,不需要合并。 如果他们在同一代码上工作,那么在拉取和更新之后,也需要运行一些测试,以确保在其他开发人员集成工作时,隔离工作的仍然工作。频繁地接受其他人的贡献和推动我们自己的更改也被称为持续集成,并确保集成问题很快就会被发现

希望能有所帮助。

假设更改确实没有冲突,您可以使用代替合并

首先,将其放入
.hgrc
文件中:

[extensions]
rebase =
现在,不进行合并,只需执行
hg rebase
。它将“分离”本地变更集,并将它们移动到公共提示的后代。您还可以传递各种参数来修改重新设置的内容

同样,如果您的开发人员将遇到物理合并冲突或逻辑冲突(例如,Alice在Bob更改文件B中的相关功能的同时更改了文件a中的功能),则这不是一个好主意。在这些情况下,您可能应该使用真正的合并来正确表示相关的历史记录。
hg rebase
如果遇到物理冲突,可以很容易地中止,但最好手动检查逻辑冲突,因为扩展无法自动检测到这些冲突。

假设更改确实没有冲突时,可以使用代替合并

首先,将其放入
.hgrc
文件中:

[extensions]
rebase =
现在,不进行合并,只需执行
hg rebase
。它将“分离”本地变更集,并将它们移动到公共提示的后代。您还可以传递各种参数来修改重新设置的内容


同样,如果您的开发人员将遇到物理合并冲突或逻辑冲突(例如,Alice在Bob更改文件B中的相关功能的同时更改了文件a中的功能),则这不是一个好主意。在这些情况下,您可能应该使用真正的合并来正确地表示相关的历史记录。
hg-rebase
如果遇到物理冲突,可以很容易地中止,但最好手动检查逻辑冲突,因为扩展无法自动检测到这些冲突。

您的开发团队正在提交这正是你想要的,所以你不想为了一条干净的承诺线而改变这个习惯

@Kevin已经描述了使用,我同意它可以很好地工作