Почему git log/status не возвращает результат?

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

Я запустил команду в соответствующем файле:

$ git status Data/schema.sql
$

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

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

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

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

Ответ 1

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

Нечувствительная к регистру принудительное переименование в истории

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

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 документации.

Ответ 2

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.

Ответ 3

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

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

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