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

qaz*_*wsx 4 git git-ls-files

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

100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Run Code Online (Sandbox Code Playgroud)

这些字段是什么意思?

jub*_*0bs 5

只需查看git ls-files手册页即可:

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

       [<tag> ]<mode> <object> <stage> <file>
Run Code Online (Sandbox Code Playgroud)

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

这些字段是什么意思?

  • <mode>是模式位。更多详细信息,请参阅如何读取 git-ls-tree 输出的模式字段
  • <object>是相应 blob 的 SHA,即相关文件内容的唯一标识符。
  • <stage>是阶段号,通常为0,但对于存在合并冲突的文件采用非零值。
  • <file>只是文件的路径。

您还在后续评论中问道,

<object>和 之间有什么关系<file>

它们是完全独立的,因为仅使用文件的内容(而不是其路径/文件名)来生成与其关联的哈希值。为了让自己相信这一点,您可以在玩具存储库中进行以下实验:

       [<tag> ]<mode> <object> <stage> <file>
Run Code Online (Sandbox Code Playgroud)

请注意,即使这两个文件具有不同的名称,它们也具有相同的 SHA,因为它们具有相同的内容。