在 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/