それらがどのように機能するかに関して、私は低レベルの作業について疑問に思っていました:
- マージの競合を引き起こすのは何ですか?
- コンテキストは、パッチを適用するためにツールでも使用されますか?
- 実際にはソース コードの動作を変更しない変更にどのように対処するのでしょうか? たとえば、関数定義の場所を交換します。
安全性に関しては、正直なところ、巨大な Linux カーネル リポジトリが安全性の証です。ただ、以下の点が気になります。
- ユーザーが知っておくべきツールに関する警告/制限はありますか?
- アルゴリズムが間違った結果を生成しないことが証明されていますか?
- そうでない場合、少なくとも経験的にエラーがないことを証明する統合テストを提案する実装/論文はありますか? これらの論文BrianKorverとJamesCplienの内容のようなもの。
- 繰り返しますが、前の点に関しては Linux リポジトリで十分ですが、もっと一般的なものについて疑問に思っていました。ソース コードは、変更されても (特に実装されているアルゴリズムと構文の制限により) あまり変更されませんが、安全性を一般的なテキスト ファイルに一般化できますか?
編集
わかりました、質問があいまいで、回答が詳細に対応していないため、編集しています。
Git/差分/パッチの詳細
Git がデフォルトで使用しているように見える統合 diff 形式は、基本的に 3 つのものを出力します: 変更、変更を取り巻くコンテキスト、およびコンテキストに関連する行番号です。これらのそれぞれが同時に変更されている場合とされていない場合があるため、Git は基本的に 8 つの可能性のあるケースに対処する必要があります。
たとえば、コンテキストの前に行が追加または削除された場合、行番号は異なります。ただし、コンテキストと変更が同じままである場合、diff はコンテキスト自体を使用してテキストを整列させ、パッチを適用できます (これが実際に発生するかどうかはわかりません)。さて、他のケースではどうなるでしょうか?Git が変更を自動的に適用することを決定する方法と、エラーを発行してユーザーに競合を解決させることを決定する時期の詳細を知りたいです。
信頼性
Git にはコミットの完全な履歴があり、履歴をトラバースできるため、Git は完全に信頼できると確信しています。私が望むのは、学術研究へのいくつかの指針と、これに関する参考文献が存在する場合です。
この主題に少し関連していますが、Git/diff はファイルを一般的なテキスト ファイルとして扱い、行で動作することを知っています。さらに、diff で採用されている LCS アルゴリズムは、変更の数を最小限に抑えようとするパッチを生成します。
そこで、私も知りたいことがいくつかあります。
- 他の文字列メトリック アルゴリズムの代わりに LCS が使用されるのはなぜですか?
- LCS が使用されている場合、基礎となる言語の文法的側面を考慮したメトリックの修正版を使用しないのはなぜですか?
- 文法的な側面を考慮したそのような測定基準が使用される場合、それらは利益をもたらすでしょうか? この場合の利点は、たとえば、よりクリーンな「責任ログ」など、何でもかまいません。
繰り返しになりますが、これらは巨大なトピックになる可能性があり、学術論文は大歓迎です。