`git ls-files -s`的输出中不同字段的含义是啥?
Posted
技术标签:
【中文标题】`git ls-files -s`的输出中不同字段的含义是啥?【英文标题】:What is the meaning of the different fields in the output of `git ls-files -s`?`git ls-files -s`的输出中不同字段的含义是什么? 【发布时间】:2015-03-25 09:49:25 【问题描述】:在 Git 中,命令 git ls-files -s
返回的结果的典型行如下所示
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
这些字段是什么意思?
【问题讨论】:
【参考方案1】:看看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,即相关文件的 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>
是什么关系?
@qazwsx 对象是文件内容的哈希值,也是用于存储文件内容的 git 对象的地址(因为 git 本质上是一个内容可寻址的文件系统)建立在它之上的版本控制系统)。
<object>
寻址的内容(即 SHA-1 摘要)是否通常部分 <file>
的文件内容?
@qazwsx 我不明白你在上一条评论中的问题。你能澄清一下吗?
如果<object>
和<file>
真的是独立的并且没有任何关系,那么将它们显示在同一行中是没有用的。 <object>
值消化的数据内容不就是文件<file>
的一部分吗?以上是关于`git ls-files -s`的输出中不同字段的含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用Javascript将HTML元素插入另一个HTML元素
Git 常用操作 - git clone/git checkout -b/git diff/git push/git pull
Git 常用操作 - git clone/git checkout -b/git diff/git push/git pull
从0到1带你掌握git(一分钟掌握git)--git如何下载?git如何使用?git是什么?git怎么获取文件?