Почему бы 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.