Почему бы git log/status не вернуть ничего?

У меня есть очень старый git-репозиторий (около шести лет), и я заметил, что не вижу изменений, которые я внес в файл в моем git status выход.

Я выполнил команду для конкретного файла:

$ git status Data/schema.sql
$

и не получил выходной! Этот файл находится в репо с самого начала. Кроме того, если я извлекаю репо в другой каталог, файл (как ни странно) появляется там.

Я видел то же самое с git diff Data/schema.sql а также git log Data/schema.sql,

Обычно, когда что-то подобное происходит, это gitignore проблема. Но даже убирая .gitignore файл не вызвал изменений в этом поведении.

Что может вызвать такое поведение?

4 ответа

Решение

Этот "симптом" имеет два возможных "диагноза":

Без учета регистра принудительное переименование снова в истории

Диагностика:

git ls-files

Поиск путей с разными заглавными буквами:

some/path/foo
Some/path/bar

Решение

git mv -f Some/path/* some/path/

Важно переместить все файлы (/*) к переименованному пути. Теперь у них у всех будет один путь.

Возможная причина

Может возникнуть ситуация, когда some/path содержит несколько файлов, которые отслеживаются с разными регистрами букв в пути. Для таких файлов указывается "неправильный" путь к git log или же git status приводит к отсутствию некоторых коммитов в выводе журнала.

Эта ошибка может быть воспроизведена с git mv -f <path/file> <PATH/file> на Git 1.9.5 и, возможно, на более новых версиях (проверим позже).

git log Some/path/foo

Журнал не будет содержать некоторые коммиты, сделанные до git mv -f some/path/bar Some/path/bar был выполнен.

Файлы, отмеченные skip-worktree или же assume-unchanged bit

Спасибо @Zeeker за это предположение.

Диагностика:

git ls-files -v | grep -E '^(S|[a-z])'

Для получения дополнительной информации взгляните на git ls-files документация

Я обнаружил, что при использовании оболочки MINGW64 Bash, которая поставляется с некоторыми версиями git, их попытка управлять чувствительностью к регистру может привести к этому сбою. Чтобы решить эту проблему, "cd" с правильной заглавной буквы. В приведенном ниже примере правильное имя каталога — «CalMAN App». Однако, если вы перейдете к «приложению Calman», это сработает. К сожалению, это сбивает с толку git.

      micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5 (master)
$ cd "calman app"

micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/calman app (master)
$ git log .

micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/calman app (master)
$ cd ..

micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5 (master)
$ cd "CalMAN App"/

micha@mrosen-win1 MINGW64 ~/dev/CalMAN/src/CalMAN/calman 5/CalMAN App (master)
$ git log .
commit 41d026ddf3282227932136245092aaabace4aded
...

Я делал git logв самой глубокой папке в windows. не работает. поэтому я попробовалgit ls-files. это тоже не работало

Я просматривал папки достаточно раз, пока git ls-files работал, а затем использовал git log с относительным путем к файлу.

Не знаю, что вызывает это, но это решило проблему для меня. (хотя бы временно)

TL;DR: проверить наличие других запущенных git-клиентов.

У меня просто была похожая проблема: нулевой вывод из git.

git status, git log, git fetch: все так же. Ничего такого. Пустая строка и обратно в командную строку.

Я получал ответы только тогда, когда был в родительском каталоге, который не был репозиторием или в другом репозитории. Кроме того, я получил ошибки и предложения для неправильно набранных команд. Так что это было не совсем мертвым. Просто в спящем режиме - или что-то.

Первый ответ, который я нашел, был git branches на котором правильно напечатаны известные ветки. Так я играл с ветками и использовал git checkout master что ничего не дало и все вышеперечисленные команды не изменились. Все ничего. Когда я попытался вернуться к develop Я получил подсказку:

fatal: Unable to create 'I:/foo/bar/repo/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

Я нашел запущенный git-UI-клиент (в моем случае GitKraken) и закрыл его. Исправлена. Возможно, проблема как-то связана с тем, что мое хранилище было в сетевой папке Windows.

Другие вопросы по тегам