40

Git は、ユーザーがコミットを参照するために SHA-1 を使用します。

Subversion (SVN) とMercurial (hg) は増分番号を使用します。

Git チームはなぜ、わかりやすいものではなく SHA-1 を使用するという設計上の決定を下したのでしょうか?

4

3 に答える 3

37

Mercurial (hg) も SHA1 ハッシュを使用します。また、コミット履歴からリビジョン番号を取得しようとします。ただし、これらのリビジョンは 1 つのリポジトリでのみ有効です。別のレポを見る場合、これらのリビジョンが一致するとは限りません。

git と mercurial がハッシュを使用する理由については、どちらも非線形のコミット履歴を持っています。両方が分散されているため、ローカル リポジトリで同じコード ベースで作業でき、中央機関と同期する必要はありません (SVN と CVS で必要)。ローカルでコミットして後でマージすると、直線的に増加する整数リビジョンを形成するための一貫したスキーマを考え出すのに苦労することになります。できたとしても、異なるリポジトリ間で異なる結果が得られます。

結局のところ、それはすべて分散型の性質によるものです。これは、コミットに対してかなり一意の識別子を作成する簡単な方法です。また、副産物として、単一のコミットに対する完全な履歴をハッシュにエンコードすることもできます。つまり、コミットに同じ diff がある場合でも、異なる SHA1 ハッシュが得られる可能性があります。

于 2012-06-27T19:35:38.180 に答える
7

これは、コミットの識別と検証の両方の方法として使用されます。SHA1 番号は、コミットで行われたすべての変更のチェックサム、作成者の名前、および親コミットの SHA1 です。(そしてIIRCにはコミットメッセージも含まれていますが、確かではありません)。

リモートからプル/フェッチすると、git は受信したファイルに対してチェックサムをチェックして、コードの破損または変更されたバージョンを受信して​​いないことを確認します。

于 2012-06-27T19:33:29.600 に答える
1

Git と HG はどちらも SHA1 を使用してコミットを識別します。SVN は変更のシーケンシャル モデルを操作するため、増分バージョン番号をサポートできますが、Git と HG ははるかに洗練されており、頻繁な分岐とマージにはるかに適した開発の有向非巡回グラフ モデルをサポートしています。

HG 増分番号は SVN 増分番号とは異なり、リポジトリの異なるコピー間で特定のリビジョンを参照するのには適していないため、SVN リビジョン番号と同じ方法で使用することはできません。

于 2012-06-27T19:37:17.490 に答える