为什么SVN会在checkin上合并更改而不是替换?

时间:2015-01-30 17:32:04

标签: svn version-control

我刚刚被告知如果我在文件中进行更改然后签入(我使用Visual Studio + Ankh),那么更改将被有效合并。无论我检查什么,我一直都在想 - 它的终极目标。我确信我签入的文件将被完整替换,使源100%保持最新状态。没有篡改..

现在我听说svn实际上合并了repo中的文件..这是正确的吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

合并发生时,不会发生任何冲突。你改变了不同于同事的线路。但是,即使没有行冲突,您也可以看到存在逻辑冲突

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


  是的,我知道......我的老板也不相信:)

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

根据物理学:

  

Power = Work / Time

据你的老板说:

  

Time = Money

所以我们替换

  

Power = Work / Money

根据Machivelli的说法:

  

Knowledge = Power

所以我们再次替换:

  

Knowledge = Work / Money

我们可以重申这个来解决钱:

  

Money = Work / Knowledge

Knowledge接近零时,无论Money的数量是多少,Work都会增加。