Git обвиняют, не показывая истории - PullRequest
87 голосов
/ 09 января 2011

Когда я запускаю 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

, т.е. все строки отображаются как еще не зафиксированные.

Iпробовал это на многих файлах, которые имеют много коммитов - всегда одинаковые результаты.Я также пытался использовать относительный / полный путь, но это, кажется, не имеет значения.

Когда я пытаюсь использовать вину TortoiseGit, он всегда показывает каждую строку как последнюю зафиксированную при первом коммите:

alt text

даже подумал, как я уже сказал, на самом деле в истории этих файлов есть десятки коммитов ..

Идеи?

Править- Подробнее

  • Git blame отлично работает на GitHub, где размещается это репо.
  • Он также отлично работает, если я клонирую его на Linux-машину и делаю винутам
  • Кажется, что только на msysgit это не работает

Ответы [ 4 ]

125 голосов
/ 11 января 2011

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

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

55 голосов
/ 09 января 2011

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

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

git blame file.txt

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

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

git blame my_branch file.txt

Это работает!

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

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
7 голосов
/ 27 июля 2014

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

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

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

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

1 голос
/ 21 августа 2011

Другая возможность: ввод имени файла с учетом регистра

У меня была такая же проблема с git blame file.txt, затем я понял, что сделал опечатку с учетом регистра с учетом file.txt

Изменил его на File.txt (например), и я получил ожидаемые результаты без указания my_branch: git blame File.txt

...