2016-05-22 3 views
2

アップデート:私は二つのことを一緒に混合する:最初の行は、実際に(非常によく、以下の回答で説明したように)ディレクトリを指す、と親に二行目のポイントは、コミット。私は二番目に私を欺いた。あなたの説明に感謝します。は2人でコミットできますが、同じハッシュを持っていますか?


私はgitを勉強していて、コードsheをコピーしていました。私が最初にをコミットしていないはそれをコミットしてくださいと呼ばれるサブセクションにありました。彼女がコミットした後、これは彼女が(私は理由をフォーマットするために彼女のメールを消さ)得たものである:

ツリーce72afb5ff229a39f6cce47b00d1b0ed60fe3556

親774b54a193d6cfdd081e581a007d2e11f784b9fe

著者メアリーローズ・クック...

コミッターメアリーローズクック...

a2

そして、不思議なことに、私は

...(私は私の個人情報を消さ)

ツリーce72afb5ff229a39f6cce47b00d1b0ed60fe3556

親c96fbf6143ccef645d1cb867b05427c399a9bcb3

著者....

コミッターを得ました

A2

現在のツリーのための2つのハッシュを比較すると、我々の両方が同じハッシュを(私はまさに彼女のコードに従ってください)を得ることは明らかです。

だから私は、これが可能であるかについて非常に好奇心?私はgitがおそらくその瞬間のスナップショットをハッシュしていることを知っているが、私のメガダタは確かに彼女と同じではない。誰かが何が起こるか知っていてもいい? tree hash

+0

質問のタイトルと本文が一致しません。あなたはハッシュやツリーハッシュをコミットすることを指していますか? – Jubobs

+2

内容が同じなので、彼女のツリーとツリーは同じハッシュになります。あなたがリンクしている記事はそれを説明しています:*このblobファイルには、data/letter.txtの圧縮された内容が含まれています。 **その名前はその内容をハッシュすることによって得られます。**テキストをハッシュすると、元のテキストを一意に識別する小さなテキストに変換するプログラムが実行されます。例えば、Gitは 'a'を' 2e65efe2a145dda7ee51d1741299f848e5bf752e'にハッシュします。* – Jubobs

+0

@Jubobsありがとう。私は今私が間違っていたことを知っていた。 –

答えて

7

は、現在の作業ディレクトリのハッシュである - つまり、その中に同じファイルとディレクトリを持つ2つのディレクトリが同じツリーのハッシュを持つことになります。

ツリーは、履歴内の特定のポイントに結びついていないファイルとディレクトリの階層的な集合です。たとえば、ファイルを作成して後でファイルを削除した場合(他に介入するコミットがない場合)は、開始したのと同じツリーになります。 Aがコミット

は、プロジェクトの歴史の中でのポイントです。コミットツリーを指定しますが、また、作者/コミッターや時間などの情報が含まれている、リポジトリの前の状態ですコミットメッセージ(ここで、著者が変更内容を説明)、そして最も重要な、ゼロまたはそれ以上の両親、。 (あなたは非常に最初にそれ以降のほとんどのコミットがリニア開発中に1つの親を持っている。ゼロの両親を持ち、そしてあなたがマージ場合は、複数のコミット。)

Source

あなたには、いくつかの変更を行い、それらをコミットしたら、commit hashを持つことになります。 40文字のSHA1ハッシュでのハッシュ衝突の可能性は非常に非常に非常に非常に小さいです。

SHA-1ハッシュは40文字の16進数の文字列です。文字あたり4ビット、40〜160ビットの倍数です。今私たちは10ビットが約1,000(正確には10^24)ということを知っています。これは、1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000異なるSHA-1ハッシュ... 10^48があることを意味します。

これはどういう意味ですか?まあ、月は約10^47の原子でできています。だからもし我々が10個のムーンを持っていれば、これらの衛星のうちの1つの原子を無作為に選んで、次にランダムな原子を選んで...同じ原子を2回選ぶ可能性2つのgitコミットが同じSHA-1ハッシュを持つ可能性があります。

Source

あなたはまた、(parent hash)コミット同じ親オフ二つ以上の異なるコミットを持つことができ、これはあまりにも結構ですが、すべてのハッシュをコミット異なります。あなたが驚くことでない限り、心が吹っ飛んで(幸い)幸運です。

+0

ありがとうございました!それは非常に明確です。 –

+1

「月は約1047個の原子で構成されています」 - 代わりに10^47のようなものが...? –

+0

@ DanLoweについてはhttps://github.com/progit/progit2/issues/409をご覧ください。 – Jubobs