2009-06-25 15 views
73

gitがコミットを実行すると、バイナリファイルはrewrite foobar.bin (76%)に似たものに書き換えられます。それは何ですか %?それは、変更されたパーセンテージか、古いファイルから保持されたパーセンテージです。 gitはファイルにバイナリデルタを使用していることを知っていますが、%が表す書き換えの量はわかりません。git help commitのヘルプページに表示されていないようです。git commit後のメッセージ "rewrite ...(90%)"はどういう意味ですか?

ありがとうございます!

+0

http://stackoverflow.com/questions/244639/git-thinks-i-am-rewriting-one-of-my-files-everytime-i-make-a-small-change – VonC

+11

に関連する可能性があります。 Gitは実際には、各ファイルの各コミットの完全なコピーを(「ブロブ」として)格納します。 diffを要求すると、Gitは問題のファイルの両方のコピーを取得し、その時点でdiffを実行します。実際の差分はどこにも格納されません。これは本当にあなたの質問に答えるものではありませんが、Gitが "バイナリデルタ"を格納することを考えるのは間違いであると指摘しています。 –

答えて

48

その類似性指標の尺度。類似性指数は、変化していない線の割合である。 gitはファイルがテキストだと思います。

+8

私はGitがファイルがテキストだと考えるのかどうかは、類似性の指標が無関係だと考えています。いくつかのバイナリファイルがテキストのように見えることがあるので、それは確かではありません。 –

-4

一貫性のある形式にCRとLFを書き換えしようとしています。つまり、バイナリファイルはバイナリとして表示されません。つまりthis pageから

*.bin -crlf -diff -merge 

::[.binファイル]拡張子を持つ

すべてのファイルを キャリッジリターン/ラインフィードを持っていません正しく.gitattributesに次の行を入れて、これを行うためにgitのを強制するには行わ 翻訳は、差分を取っされず、 マージ競合になります そのまま元のファイルを残します。

+10

これは、質問のコンテキスト内での「書き換え」の意味ではありません。 Gitは "このファイルを書き直したが、その76%を以前と同じように残したように見えます"と言っています。 –

19

私は数が類似指標であることを、マーティンが正しいと信じています。 git-diff manページから:

類似性指数は変わらずのラインの割合 あり、かつ 相違度が変更された行の割合 です。 の整数に切り捨てられ、パーセント記号が続きます。 類似度インデックス値100%は であるので、2つの等しいファイル のために予約されていますが、100%の非類似性は古いファイルの 行が新しいファイル になっていないことを意味します。

初めて私のバイナリが劇的に変化していると思った。

+0

名前の変更が67%続いた場合、ファイルの名前が変更されたばかりでなく、元のファイルの67%がまだ存在していると解釈することになります。これは、名前変更中に元のファイルの33%を誰かが編集したことを意味する可能性があります。名前の変更が単一のコミットであった場合に、ファイルの編集が行われた場合には、より有益でしょうか?リネームの類似性インデックスの出力は100%になるでしょうか?理論的には名前の変更が成功し、データが失われていないことを意味するでしょうか?今日私はこれを初めて見ました。そして、私はそれが意図された使用であることを理解していることを確認したいと思います。 – Eric

関連する問題