为什么 SVN 在签入时合并更改而不是替换?

Why SVN merges changes on checkin instead of replacing?

我刚刚被告知,如果我在文件中进行更改然后签入(我使用 Visual Studio + Ankh),那么更改将被有效地合并。我一直认为无论我入住什么 - 它都是终极的。我确信我签入的文件将被全部替换,使源 100% 保持最新。没有篡改..

现在我听说 svn 实际上会在存储库中合并文件。这是正确的吗?

如果是 - 其他源代码控制系统在这方面做了什么? Git,MS TFS?

你被告知错了。合并发生在您的工作副本中,而不是在提交期间。几乎所有版本控制系统都是这样做的:合并发生在开发人员的工作区,提交的更改正是开发人员工作区中的内容。

想象一个场景,您和您的同事检出同一个文件。您的同事在程序的第 90 行中初始化了一个计数器变量,并在第 91 行和第 110 行之间进行了一些计数。在第 200 行附近的某处,您的同事使用了存储在此变量中的计数。同时,您决定在第 150 行和第 175 行中使用相同的计数器变量。

合并发生时,不会有任何冲突。您换的线路与您的同事不同。但是,你可以看到即使没有行冲突..也有逻辑冲突

这就是必须在工作副本中进行合并的原因。由拥有该工作副本的开发人员来验证合并没有问题。毕竟,当该开发人员在他们的工作副本中进行合并时,他们的名字将在他们提交时出现在该更改上。


yeah i know that.. my boss was convinced otherwise :)

证明:经理知道的越少,他们赚的钱就越多

根据物理学:

Power = Work / Time

据你的老板说:

Time = Money

所以我们替换

Power = Work / Money

根据马基维利的说法:

Knowledge = Power

所以我们再次替换:

Knowledge = Work / Money

我们可以重申这一点来解决金钱问题:

Money = Work / Knowledge

随着 Knowledge 接近零,无论 Work 的数量如何,Money 都会增加。