文件粒度与线粒度版本控制系统
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
.
如果有人想合并提交 001a
和 001b
,合并系统将无法判断哪个是行的正确更改,也许项目的正确更改会使用提交 001a
中的内容,或者可能使用提交 001b
中的内容,或者甚至可能混合使用行中的两种更改(有人必须创建)。
这通常是您遇到需要手动干预的冲突的原因,因为两个开发人员在同一个文件和行中工作并编写了不同的更改。
在其余情况下,结果显而易见:
- 两个提交都没有变化?合并结果没有变化。
- 两个提交有变化吗?更改在合并中应用。
- 同一文件中的更改,但 不同的行(例如,两个开发人员使用不同的方法)?合并中应用了这两项更改。
适用于文件和文件行的版本控制系统有哪些示例?
以我的理解,只要没有文件冲突,工作在文件上的控制系统就能够自动管理合并:
例如:
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
.
如果有人想合并提交 001a
和 001b
,合并系统将无法判断哪个是行的正确更改,也许项目的正确更改会使用提交 001a
中的内容,或者可能使用提交 001b
中的内容,或者甚至可能混合使用行中的两种更改(有人必须创建)。
这通常是您遇到需要手动干预的冲突的原因,因为两个开发人员在同一个文件和行中工作并编写了不同的更改。
在其余情况下,结果显而易见:
- 两个提交都没有变化?合并结果没有变化。
- 两个提交有变化吗?更改在合并中应用。
- 同一文件中的更改,但 不同的行(例如,两个开发人员使用不同的方法)?合并中应用了这两项更改。