web-dev-qa-db-ja.com

歴史を示さないGitのせい

ファイルに対してgit blameを実行すると(msysgitを使用)、常に次のような出力が得られます。

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

つまり、すべての行が「未確定」として表示されます。

私はこれを、多くのコミットがある多くのファイルで試しました-常に同じ結果です。相対パスまたは完全パスも使用してみましたが、違いはないようです。

TortoiseGitのせいにしようとすると、常にすべての行が最初のコミットで最後にコミットされたものとして表示されます。

alt text

私が言ったように、考えたとしても、これらのファイルの履歴には実際には数十のコミットがあります。

アイデア?

編集-詳細

  • Git Blameは、このリポジトリがホストされているGitHubで正常に動作します。
  • Linuxマシンにクローンを作成し、そこで責任を負う場合も正常に動作します
  • Msysgitでのみこれは機能しないようです
88
Assaf Lavie

git blame file.txtは作業コピーのfile.txtのバージョンのせいです。 file.txtのリポジトリにWindows改行(CRLF)があり、core.autocrlf = trueがある場合、file.txtのすべての行は異なると見なされ、git blameによってまだコミットされていないことが報告されます。

git blame <my_branch>(またはより優れたgit blame HEADは、どのブランチを使用していても機能する)が機能する理由は、作業コピーバージョンのせいではないため、まだ行が作成されていない可能性があるためです。コミットされています。

126
kusma

解決策を見つけました-非常に奇妙です。

これを実行すると:

git blame file.txt

上記のように、歴史は壊れています。

代わりにこれを行うと:

git blame my_branch file.txt

できます!

AFAICSの使用法はブランチ名を必要としないため、これは非常に奇妙です。

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
55
Assaf Lavie

Git 2.0.1(2014年6月25日)以降、git blameはこれらの「まだコミットされていない」行の報告をすべて停止する必要があります。

参照 commit 4d4813a (2014年4月26日) brian m.carlson(bk2204
Junio C Hamano-gitster- によってマージ commit e934c67 、2014年6月6日)

blameautocrlfに関係なくファイルを正しく処理する

ファイルにCRLFが含まれている場合、リポジトリの末尾がcore.autocrlf=inputの場合、常にマークされた行を「Not Committed Yet "、変更されていない場合でも。
偽のコミットを作成するときに行末を変換しないで、autocrlfの設定に関係なく非難が正しく機能するようにします。

7
VonC

別の可能性:大文字と小文字を区別するファイル名のタイプミス

私はgit blame file.txtで同じ問題を抱えていましたが、file.txtで大文字と小文字を区別するファイル名のタイプミスをしたことに気付きました

(たとえば)File.txtに変更すると、my_branchを指定しなくても期待どおりの結果が得られました:git blame File.txt

1
John Jacecko