Что означают различные поля в выводе `git ls-files -s`?
В Git типичная строка результата возвращается командой git ls-files -s
похоже
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Что означают эти поля?
1 ответ
Смотрите не дальше, чем git ls-files
справочная страница:
git ls-files
просто выводит имена файлов, если--stage
указано, в каком случае он выводит:[<tag> ]<mode> <object> <stage> <file>
(The --stage
флаг эквивалентен -s
.)
Что означают эти поля?
<mode>
биты режима. Подробнее читайте в разделе Как читать поле режима вывода git-ls-tree<object>
является SHA соответствующего большого двоичного объекта, то есть уникальным идентификатором содержимого рассматриваемого файла.<stage>
это номер этапа, который обычно0
но принимает ненулевые значения для файлов с конфликтами слияния.<file>
это просто путь к файлу.
Вы также спрашиваете, в одном из ваших последующих комментариев,
Какова связь между
<object>
и<file>
?
Они полностью независимы, поскольку только содержимое файла (не его путь / имя файла) используется для создания хэша, связанного с ним. Чтобы убедиться в этом, вы можете провести следующий эксперимент в хранилище игрушек:
# set things up
$ mkdir testgit
$ cd testgit/
$ git init
# write the same contents to two files
$ printf "foo\n" > README.md
$ printf "foo\n" > bar.txt
# stage the two files and run git ls-files
$ git add .
$ git ls-files -s
100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0 README.md
100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0 bar.txt
Обратите внимание, что, хотя эти два файла имеют разные имена, они имеют идентичные SHA, поскольку они имеют одинаковое содержимое.