В Git типичная строка результата, возвращаемого командой git ls-files -s
, выглядит так:
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Что означают эти поля?
В Git типичная строка результата, возвращаемого командой git ls-files -s
, выглядит так:
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Что означают эти поля?
Посмотрите не дальше 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, поскольку имеют одинаковое содержимое.
<object>
и <file>
?
- person qazwsx; 27.01.2015
<object>
(т. е. дайджест SHA-1), обычно частью содержимого файла <file>
?
- person qazwsx; 27.01.2015
<object>
и <file>
действительно независимы и не имеют никакого отношения, то нет смысла показывать их в одних и тех же строках. Разве содержимое данных, обработанное значением <object>
, не является частью файла <file>
?
- person qazwsx; 27.01.2015
<object>
и <file>
полностью независимы, но вам все равно нужно знать, какой контент (обозначается <object>
) связан с каким файлом (обозначается его путем <file>
); каждая строка в выводе git ls-files -s
показывает вам эту корреспонденцию.
- person jub0bs; 27.01.2015
associated
вы подразумеваете, что содержимое, указанное <object>
, существует в файле, указанном <file>
? ассоциированный - абстрактный глагол. В каком именно смысле они связаны?
- person qazwsx; 27.01.2015
<object>
, существует в файле, обозначенном <file>
? Да. Git должен отслеживать эту информацию; в противном случае он не знал бы, какое содержимое связано с каким из файлов, которые он отслеживает.
- person jub0bs; 27.01.2015