我正在研究一种新的基于weave的数据结构来存储版本控制历史。这无疑会在它问世时引发一些关于它是否是正确的做事方式的宗教战争,但这不是我现在的问题。
我的问题与输出责备有关应该给。当一行代码被多次添加、删除和合并到自身中时,并不总是清楚应该归咎于哪个修订版本。值得注意的是,这意味着当一段代码被删除时,它曾经存在的所有记录都消失了,删除没有责任。与我讨论过这个问题的每个人都说,试图做得更好根本不值得。有时人们会说,被删除的部分后面的那一行的责任从它实际上是什么变成了该部分被删除时的修订。据推测,如果该部分位于末尾,那么最后一行的责任就改变了,如果文件最终为空,那么责任确实会消失在以太中,因为实际上没有地方可以放置责任信息。
继续我的实际问题。通常要为每一行负责,您会查看在历史记录中添加和删除它的完整历史记录,并使用三向合并(或者,在交叉合并的情况下,随机胡说八道)并基于这些之间的关系您根据其历史确定该行是否应该存在,如果不应该存在,那么您将其标记为当前版本的新版本。如果一行出现在具有不同责任的多个祖先中,那么它会任意选择继承哪一个。同样,我认为继续这种完全没有记录但事实上的标准做法将是没有争议的。
我的新系统的不同之处在于,它不是基于对整个历史的复杂计算来对给定行是否应该在当前修订版中进行复杂计算,而是简单地查看直接祖先,以及该行是否在任何他们选择任意一个来继承责任。我之所以做出这个改变主要是出于技术原因(出于类似的技术原因和缺乏关心,其他责备实现完全有可能做同样的事情)但在考虑了一下之后,我的一部分实际上更喜欢新行为比旧的更直观和可预测。大家怎么看?