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 (25 июня 2014 г.), git blame должен прекратить сообщать обо всех этих строках «Еще не зафиксировано». Смотрите мой ответ ниже
VonC
В списке рассылки: git.661346.n2.nabble.com/… Также бывает в Linux.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Это также влияет на WSL, поэтому я добавил тег. Надеюсь, что все в порядке.
mikemaccana

Ответы:

127

git blame file.txtвинит версию file.txt в вашей рабочей копии. Если file.txt имеет Windows-newlines (CRLF) в репо, а у вас есть core.autocrlf = true, то каждая строка file.txt будет считаться другой и будет сообщаться git blameкак еще не зафиксированная.

Причина, по которой git blame <my_branch>(или даже лучше git blame HEAD, которая работает независимо от того, в какой ветке вы находитесь) работает, заключается в том, что она не винит версию рабочей копии, поэтому нет возможности для строк, которые еще не зафиксированы.

кусма
источник
118
git blame -wигнорирует пробелы, поэтому при желании вы все равно можете обвинить рабочую копию
Кайл Хейронимус
13
Git blame -w должен быть отдельным и принятым ответом;). Принятый ответ без комментария был для меня бесполезен.
Гийом Перро,
55

Нашел решение - очень странно.

Если я запустил это:

git blame file.txt

История нарушена, как написано выше.

Если я сделаю это вместо этого:

git blame my_branch file.txt

Оно работает!

Это очень странно, потому что для использования AFAICS не требуется имя ветки:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
Ассаф Лави
источник
7
Это работает для меня, спасибо за публикацию. Вы должны отметить это как ответ ИМО.
wes
Это работает для меня в msysgit, но имя файла чувствительно к регистру. Так что я могу писать, git blame mybranch cmakelists.txtи это не удастся; но если я напишу, git blame mybranch CMakeLists.txtбудет работать.
цикл
Я согласен, Уэс; blame не показывал истории, пока я не указал ветку, а это несовместимо с документацией.
josephdpurcell 09
OMG, вина так неуместны.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
8

Начиная с git 2.0.1 (25 июня 2014 г.), git blame должен прекратить сообщать обо всех этих строках «Еще не выполнено».

См. Commit 4d4813a (26 апреля 2014 г.), автор: brian m. Карлсон ( bk2204) .
(Объединено Junio ​​C Hamano - gitster- в коммите e934c67 , 06 июня 2014 г.)

blame: правильно обрабатывать файлы независимо от autocrlf

Если файл содержит CRLFокончания строк в репозитории на core.autocrlf=input, то винить всегда отмеченные строки как " Not Committed Yet", даже если они не были изменены.
Не пытайтесь преобразовать окончания строк при создании фальшивого коммита, чтобы авторство работало правильно независимо от autocrlfнастройки.

VonC
источник
8
У меня все еще проблема в git v2.1.3
DBedrenko 05
У меня проблема с 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

Джон Ячеко
источник