文件粒度与线粒度版本控制系统

时间:2015-08-06 12:37:12

标签: git version-control mercurial versioning

有哪些版本控制系统可以处理文件和文件行?

据我了解,在文件上工作的控制系统能够在没有文件冲突时自动管理合并:

例如:

foreach ($this->request->get('name') as $key => $val) {
            $rules['name.'.$key]    = 'required';
            $rules['phone.'.$key]   = 'required';
            $rules['comment.'.$key] = 'required';
        }
return $rules;

在什么情况下,在线上工作的版本控制系统能够自己管理合并,在其他情况下它会要求开发人员解决它们?

1 个答案:

答案 0 :(得分:0)

你的问题过于宽泛/一般,但我还是试着试一试。

现代版本控制系统中的大多数合并策略都无法解决以下问题:

假设您在存储库中的提交A中有B C 001个文件。
提交Dev1的开发人员001分支并更改文件A中的一行,提交为001a
提交Dev2的开发人员001分支,并更改文件A中的同一行,并提交为001b

如果有人想要合并提交001a001b,合并系统将无法确定该行的正确更改,也许项目的正确更改使用提交001a中的内容或提交001b中的内容,或者甚至可以混合使用行中的两个更改(有人必须创建)。

这通常是您如何得到需要手动干预的冲突,因为两个开发人员在同一个文件和行中工作并编写了不同的更改。

在其他案例中,结果很明显:

  • 两次提交都没有变化?合并结果没有变化。
  • 任一提交中的更改?更改将在合并中应用。
  • 同一文件中的更改但不同的行(例如,两个开发人员使用不同的方法)?这两项更改都将在合并中应用。