歴史を示さないGitのせい


88

ファイルに対して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は、このリポジトリがホストされているGitHubで正常に動作します。
  • Linuxマシンにクローンを作成し、そこで責任がある場合も、正常に機能します
  • msysgitでのみこれは機能しないようです

私にとってこの問題は、リポジトリが認識したパスの代わりにシンボリックリンクされたパスを使用したことが原因でしたので、ファイルは完全に新しいものであると考えました。
Kzqai

注:git 2.0.1(2014年6月25日)以降、git blameはこれらの「まだコミットされていない」行の報告をすべて停止する必要があります。以下の私の回答を
VonC '27 / 07/27


これはWSLにも影響するため、タグを追加しました。大丈夫だと思います。
mikemaccana

回答:


126

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

git blame <my_branch>git blame HEADブランチの種類に関係なく機能する)が機能する理由は、作業コピーのバージョンに問題がないため、行がまだコミットされていない可能性がないためです。


117
git blame -wは空白を無視するので、必要に応じて作業コピーを非難することができます
Kyle Heironimus

13
Git blame -wは別の答えであり、受け入れられたものでなければなりません;)。コメントなしで受け入れられた答えは私にとって役に立たなかった。
Guillaume Perrot、2015

55

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

これを実行すると:

git blame file.txt

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

代わりにこれを行うと:

git blame my_branch file.txt

できます!

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

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

7
これは私にとってはうまくいきます。投稿してくれてありがとう。これを回答IMOとしてマークする必要があります。
wes

これはmsysgitで動作しますが、ファイル名では大文字と小文字が区別されます。だから私は書くgit blame mybranch cmakelists.txtことができて失敗します。しかし、私が書けばgit blame mybranch CMakeLists.txtそれはうまくいくでしょう。
ループ

同意します、ウェス。私がブランチを指定するまで非難は履歴を示していませんでした、そしてそれはドキュメントと矛盾しています。
josephdpurcell 2013

OMG、非難はとても壊れています。
Ciro Santilli郝海东冠状病六四事件法轮功

8

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

brian mによるcommit 4d4813a(2014年4月26日)を参照してください。カールソン(bk2204
(合併によりJunio C浜野- gitster-e934c67コミット 2014年6月6日)

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

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


8
git v2.1.3でもまだ問題があります
DBedrenko

gitバージョン2.16.1.windows.1に問題があります
Radon8472

@ Radon8472問題を説明する新しい質問をgit config -l出力(およびこの回答へのリンク)とともに追加できますか?これにより、私や他の人が問題が解決しないかどうかを確認できます。
VonC

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.