Что означают разные поля в выводе `git ls-files -s`?

В Git типичная строка результата, возвращаемого командой git ls-files -s, выглядит так:

100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore

Что означают эти поля?


person qazwsx    schedule 26.01.2015    source источник


Ответы (1)


Посмотрите не дальше git ls-files справочной страницы:

git ls-files просто выводит имена файлов, если не указано --stage, и в этом случае он выводит:

       [<tag> ]<mode> <object> <stage> <file>

(Флаг --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, поскольку имеют одинаковое содержимое.

person jub0bs    schedule 26.01.2015
comment
Какая связь между <object> и <file>? - person qazwsx; 27.01.2015
comment
@qazwsx объект представляет собой хэш содержимого файла, который также является адресом объекта git, используемого для хранения содержимого файла (поскольку git, по сути, является файловой системой с адресацией по содержимому, которая имеет систему контроля версий, построенную на его вершина). - person hobbs; 27.01.2015
comment
Является ли содержимое, к которому обращается <object> (т. е. дайджест SHA-1), обычно частью содержимого файла <file>? - person qazwsx; 27.01.2015
comment
@qazwsx Я не понимаю вашего вопроса в вашем последнем комментарии. Вы можете уточнить? - person jub0bs; 27.01.2015
comment
Если <object> и <file> действительно независимы и не имеют никакого отношения, то нет смысла показывать их в одних и тех же строках. Разве содержимое данных, обработанное значением <object>, не является частью файла <file>? - person qazwsx; 27.01.2015
comment
@qazwsx <object> и <file> полностью независимы, но вам все равно нужно знать, какой контент (обозначается <object>) связан с каким файлом (обозначается его путем <file>); каждая строка в выводе git ls-files -s показывает вам эту корреспонденцию. - person jub0bs; 27.01.2015
comment
Под associated вы подразумеваете, что содержимое, указанное <object>, существует в файле, указанном <file>? ассоциированный - абстрактный глагол. В каком именно смысле они связаны? - person qazwsx; 27.01.2015
comment
[...] Вы имеете в виду, что содержимое, обозначенное <object>, существует в файле, обозначенном <file>? Да. Git должен отслеживать эту информацию; в противном случае он не знал бы, какое содержимое связано с каким из файлов, которые он отслеживает. - person jub0bs; 27.01.2015
comment
Хорошо, добавленный вами явный эксперимент показал, что данные, обработанные одинаковыми хэш-значениями SHA-1, существуют в обоих файлах. - person qazwsx; 27.01.2015
comment
@qazwsx Я не уверен, что вы имеете в виду. В этом случае Git на самом деле выясняет, что содержимое одинаковое (поскольку хеш тот же) и сохраняет только одну копию, но в рамках своей бухгалтерии связывает ее с двумя разными файлами. - person jub0bs; 27.01.2015
comment
@jubobss В моем случае у меня тот же файл отображается 2ice в результате этой команды, как в сообщении здесь stackoverflow.com/questions/54001982/ Можете взглянуть и прокомментировать? Очень признателен - person pixel; 05.01.2019
comment
@pixel У тебя другой вопрос. Отвечать на него здесь, в разделе комментариев этого ответа, неуместно. - person jub0bs; 05.01.2019
comment
@jubobs Я знаю, я подумал, может быть, ты увидишь что-то странное и дашь несколько советов по моему вопросу. Я заметил по вашему ответу, что вы разбираетесь в теме, вот и все :). В любом случае спасибо - person pixel; 06.01.2019
comment
@pixel Вы всегда можете задать отдельный вопрос. - person jub0bs; 06.01.2019
comment
@jubobs ага, по предоставленной ссылке ???? - person pixel; 06.01.2019