关于它们是如何工作的,我想知道低级的工作内容:
- 什么会触发合并冲突?
- 工具是否也使用上下文来应用补丁?
- 他们如何处理实际上并未修改源代码行为的更改?例如,交换函数定义位置。
关于安全性,说实话,庞大的 Linux 内核存储库证明了它们的安全性。但我想知道以下几点:
- 关于用户应该注意的工具是否有任何警告/限制?
- 算法是否被证明不会产生错误的结果?
- 如果没有,是否有建议集成测试的实现/论文至少证明它们在经验上是无错误的?类似于BrianKorver和JamesCoplien这些论文的内容。
- 同样,Linux 存储库就前一点来说应该足够了,但我想知道一些更通用的东西。源代码,即使改变了,也不会改变太多(特别是因为实现的算法和语法限制),但是安全性可以推广到通用文本文件吗?
编辑
好的,我正在编辑,因为问题含糊不清,答案没有解决细节。
Git/diff/补丁详细信息
Git 似乎默认使用的统一差异格式基本上输出三件事:更改、更改周围的上下文以及与上下文相关的行号。这些事情中的每一项都可能同时发生变化,也可能不会发生变化,因此 Git 基本上必须处理 8 种可能的情况。
例如,如果在上下文之前添加或删除了行,则行号将不同;但是如果上下文和更改仍然相同,则 diff 可以使用上下文本身来对齐文本并应用补丁(我不知道这是否确实发生)。现在,其他情况会发生什么?我想知道 Git 如何决定自动应用更改以及何时决定发出错误并让用户解决冲突的详细信息。
可靠性
我很确定 Git 是完全可靠的,因为它确实有完整的提交历史并且可以遍历历史。我想要的是一些关于这方面的学术研究和参考的指针,如果它们存在的话。
仍然与这个主题有点相关,我们知道 Git/diff 将文件视为通用文本文件并在行上工作。此外,diff 使用的 LCS 算法将生成一个补丁,以尽量减少更改的数量。
所以这里有一些我也想知道的事情:
- 为什么使用 LCS 而不是其他字符串度量算法?
- 如果使用 LCS,为什么不使用考虑到底层语言语法方面的度量标准的修改版本?
- 如果使用这种考虑到语法方面的指标,它们能带来好处吗?在这种情况下,好处可以是任何东西,例如,更干净的“责备日志”。
同样,这些可能是巨大的主题,欢迎学术文章。