【发布时间】:2015-03-25 09:49:25
【问题描述】:
在 Git 中,命令 git ls-files -s 返回的结果的典型行如下所示
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
这些字段是什么意思?
【问题讨论】:
标签: git git-ls-files
在 Git 中,命令 git ls-files -s 返回的结果的典型行如下所示
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
这些字段是什么意思?
【问题讨论】:
标签: git git-ls-files
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,即相关文件的 contents 的唯一标识符。<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,因为它们具有相同的内容。
【讨论】:
<object>和<file>是什么关系?
<object> 寻址的内容(即 SHA-1 摘要)是否通常部分 <file> 的文件内容?
<object> 和<file> 真的是独立的并且没有任何关系,那么将它们显示在同一行中是没有用的。 <object>值消化的数据内容不就是文件<file>的一部分吗?