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

file grained vs line grained version control systems

适用于文件和文件行的版本控制系统有哪些示例?

以我的理解,只要没有文件冲突,工作在文件上的控制系统就能够自动管理合并:

例如:

A,B,C --> A',B',C
| (branch)  ___________ (merge) -> A',B',C'  
 -------> A,B,C'  

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

你的问题太broad/generic不过我还是会尝试一下的。

现代版本控制系统中的大多数合并策略,无法处理以下内容:

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

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

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

在其余情况下,结果显而易见:

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