Тестирование несуществующих файлов
На предыдущих этапах мы успешно использовали git ls-tree
и git log -- <файл>
для проверки файла, который существует в нашем Git-репозитории. Теперь давайте посмотрим, что произойдет, если мы попытаемся использовать эти команды для файла, который не существует в истории репозитория.
Убедитесь, что вы находитесь в директории проекта:
cd ~/project/my-time-machine
Сначала попробуем использовать git ls-tree
для несуществующего файла, например, nonexistent.txt
:
git ls-tree HEAD nonexistent.txt
Вы не должны увидеть никакого вывода. Это потому, что git ls-tree
перечисляет только записи, присутствующие в указанном дереве (в данном случае, дереве в HEAD
). Поскольку nonexistent.txt
отсутствует в дереве последнего коммита, ничего не выводится.
Теперь попробуем использовать git log
для того же несуществующего файла:
git log -- nonexistent.txt
Вы должны увидеть вывод, похожий на следующий:
fatal: no such path 'nonexistent.txt' in HEAD
Это другое поведение! git log -- <файл>
специально ищет коммиты, в которых был затронут указанный путь к файлу на протяжении всей истории. Если путь к файлу никогда не существовал в каком-либо коммите, Git сообщает, что "такого пути нет".
Эта разница в поведении показывает, как работают эти команды:
git ls-tree
проверяет конкретный снимок (коммит) и перечисляет его содержимое.
git log -- <файл>
ищет по всей истории изменения, связанные с конкретным путем к файлу.
Понимание этих различий помогает вам выбрать правильную команду для задачи. Если вы хотите посмотреть, какие файлы были в коммите, используйте git ls-tree
. Если вы хотите посмотреть историю файла, используйте git log -- <файл>
.