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