3

在 Git 中,命令返回的结果的典型行git ls-files -s如下所示

100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore

这些字段是什么意思?

4

1 回答 1

4

只需查看git ls-files手册页

git ls-files只输出文件名,除非--stage指定在这种情况下输出:

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

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

这些字段是什么意思?

  • <mode>是模式位。如何阅读 git-ls-tree 输出的模式字段中的更多详细信息
  • <object>是相应 blob 的 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,因为它们具有相同的内容。

于 2015-01-26T21:50:22.700 回答