mercurial - Mercurial 中的自动 merge 有多安全?

标签 mercurial merge

在 Mercurial 中有 fetch extension可以用来模拟 svn update 之类的东西,即与传入的更改 merge ,甚至无需查看它们。但即使你不使用 hg fetch ,您的大多数 merge 将“奇迹般地”工作而不会导致冲突。这很好,但是相信这样的 merge 是 Java 代码的有效 merge 有多安全?

是否有任何示例可以说明为什么或何时应该(或不应该)信任这些 merge ?

最佳答案

好吧,只要您不开始重新组织代码,它们就非常安全。

考虑以下示例:

class A {

   public void methodA() {
     // do something here 
     // that should be great
   }

   public void methodB() {
     // And now I'll 
     // do something here
     // and it's gonna be good.
   }

   public void methodC() {
     // Finally, let's 
     // do something here
   }

}

现在,您开始工作并决定向方法C 添加一些指令。
在此期间,一位同事决定无论出于何种原因,methodC 都应该放在类的顶部。

您最终将得到两个要 merge 的版本。
你的:
class A {

   public void methodA() {
     // do something here 
     // that should be great
   }

   public void methodB() {
     // And now I'll 
     // do something here
     // and it's gonna be good.
   }

   public void methodC() {
     // Finally, let's 
     // do something here
     // and here your marvelous changes
   }

}

还有你的同事:
class A {

   public void methodC() {
     // Finally, let's 
     // do something here
   }

   public void methodA() {
     // do something here 
     // that should be great
   }

   public void methodB() {
     // And now I'll 
     // do something here
     // and it's gonna be good.
   }

}

当 merge 发生时,由于默认上下文是三行宽,自动 merge 可能会认为一个有效的结果是这个:
class A {

   public void methodC() {
     // Finally, let's 
     // do something here
   }

   public void methodA() {
     // do something here 
     // that should be great
   }

   public void methodB() {
     // And now I'll 
     // do something here
     // and it's gonna be good.
   }

   public void methodC() {
     // Finally, let's 
     // do something here
     // and here your marvelous changes
   }

}

出于这个原因,如果可能的话,我会尽量保持方法的组织性,以便将访问器分组,并且不受影响,私有(private)按通用逻辑分组,等等......但这并不总是可能的。

希望这种情况很少见,如果更改太多,mercurial 会要求您手动 merge 类。

关于mercurial - Mercurial 中的自动 merge 有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003577/

相关文章:

linux - 使用 RhodeCode 并非所有 Mecurial 变更集都是可见的

excel - 从vba中的单元格地址获取Excel合并单元格的值

ruby - NoMethodError : undefined method `reverse_merge'

git - 为什么 git merge 会让我丢失一行

mercurial - 乌龟HG : Removing commit

未推送变更集的 Mercurial 修订/修订

mercurial - 如何获取自Mercurial的特定修订版以来受影响的文件列表

mercurial - 如何禁用TortoiseHg中的 'create new branch'提示

error-handling - 在合并的可观察对象上捕获错误,并在RxJS中继续其他错误

git - 检查 pull 请求是否与目标分支保持同步