バージョン管理履歴を保存するための新しいweaveベースのデータ構造に取り組んでいます。これは間違いなく、それが出てきたときにそれが物事を行う正しい方法であるかどうかについていくつかの宗教戦争を引き起こすでしょうが、それは今の私の質問ではありません.
私の質問は、出力の責任と関係があります与えるべきです。コード行が何度も追加、削除、およびマージされた場合、どのリビジョンが原因であるかが常に明確であるとは限りません。これは特に、コードのセクションが削除されると、そこにあったすべての記録が失われ、削除の責任がないことを意味します。私がこの問題について話し合った人は皆、より良くしようとすることは単に価値がないと言っています. 削除されたセクションの後の行の責任が、実際のセクションが削除されたときのリビジョンに変更されたというハックを入れることがあります。おそらく、セクションが最後にある場合、最後の行の非難が変更され、ファイルが空になった場合、文字通り非難情報を置く場所が残っていないため、非難は実際にエーテルに消えます。
私の実際の質問に移ります。通常、各行のせいで、履歴で追加および削除された場所の完全な履歴を調べ、3方向マージ (または、十字型マージの場合はランダムでたらめ) を使用し、それらの間の関係に基づいて履歴に基づいて行が存在する必要があるかどうかを判断し、そうでない場合は、現在のリビジョンで新規としてマークします。異なる責任を持つ複数の祖先で行が発生する場合、継承するものを任意に選択します。繰り返しになりますが、この完全に文書化されていないが事実上の標準的な慣行を継続することは、議論の余地がないと思います。
私の新しいシステムが分岐するところは、履歴全体の複雑な計算に基づいて特定の行が現在のリビジョンに含まれるかどうかの複雑な計算を行うのではなく、直接の祖先を調べ、その行がいずれかの行にあるかどうかです。非難を継承する任意のものを選択します。私は主に技術的な理由でこの変更を行っています (同様の技術的な理由と配慮の欠如により、他の Blame 実装が同じことを行う可能性は十分にあります) が、それについて考えた後、私の一部は実際には新しい動作を好むようになりました。古いものよりも直感的で予測可能です。みんなどう思う?