`git ls-files -s`输出中不同字段的含义是什么?

时间:2015-01-26 21:46:08

标签: git git-ls-files

在Git中,命令git ls-files -s返回的结果的典型行看起来像

100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore

这些字段是什么意思?

1 个答案:

答案 0 :(得分:3)

只看git ls-files man page

  除非指定git ls-files,否则

--stage只输出文件名    在这种情况下,它输出:

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

--stage标志相当于-s。)

这些字段是什么意思?

  • <mode>是模式位。 How to read the mode field of git-ls-tree's output
  • 中的更多详细信息
  • <object>是相应blob的SHA,即相关文件的内容的唯一标识符。
  • <stage>是阶段编号,通常为0,但对于包含合并冲突的文件采用非零值。
  • <file>只是文件的路径。

您还可以在one of your follow-up comment中询问

  

<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,因为它们具有相同的内容。