ファイルに対して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のせいにしようとすると、常にすべての行が最初のコミットで最後にコミットされたものとして表示されます。
私が言ったように、考えたとしても、これらのファイルの履歴には実際には数十のコミットがあります。
アイデア?
編集-詳細
git blame file.txt
は作業コピーのfile.txtのバージョンのせいです。 file.txtのリポジトリにWindows改行(CRLF)があり、core.autocrlf = true
がある場合、file.txtのすべての行は異なると見なされ、git blame
によってまだコミットされていないことが報告されます。
git blame <my_branch>
(またはより優れたgit blame HEAD
は、どのブランチを使用していても機能する)が機能する理由は、作業コピーバージョンのせいではないため、まだ行が作成されていない可能性があるためです。コミットされています。
解決策を見つけました-非常に奇妙です。
これを実行すると:
git blame file.txt
上記のように、歴史は壊れています。
代わりにこれを行うと:
git blame my_branch file.txt
できます!
AFAICSの使用法はブランチ名を必要としないため、これは非常に奇妙です。
$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
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日)
blame
:autocrlf
に関係なくファイルを正しく処理するファイルに
CRLF
が含まれている場合、リポジトリの末尾がcore.autocrlf=input
の場合、常にマークされた行を「Not Committed Yet
"、変更されていない場合でも。
偽のコミットを作成するときに行末を変換しないで、autocrlf
の設定に関係なく非難が正しく機能するようにします。
別の可能性:大文字と小文字を区別するファイル名のタイプミス
私はgit blame file.txtで同じ問題を抱えていましたが、file.txtで大文字と小文字を区別するファイル名のタイプミスをしたことに気付きました
(たとえば)File.txtに変更すると、my_branchを指定しなくても期待どおりの結果が得られました:git blame File.txt