【问题标题】: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

这些字段是什么意思?

【问题讨论】:

    标签: git git-ls-files


    【解决方案1】:

    看看git ls-files man page

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

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

    --stage 标志等同于-s。)

    这些字段是什么意思?

    • &lt;mode&gt; 是模式位。 How to read the mode field of git-ls-tree's output 了解更多详情
    • &lt;object&gt; 是相应 blob 的 SHA,即相关文件的 contents 的唯一标识符。
    • &lt;stage&gt; 是阶段编号,通常为 0,但对于有合并冲突的文件,它采用非零值。
    • &lt;file&gt; 只是文件的路径。

    你也问,one of your follow-up comment

    &lt;object&gt;&lt;file&gt;是什么关系?

    它们是完全独立的,因为只有文件的内容(而不是其路径/文件名)用于生成与其关联的哈希。为了说服自己,您可以在玩具存储库中进行以下实验:

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

    【讨论】:

    • &lt;object&gt;&lt;file&gt;是什么关系?
    • @qazwsx 对象是文件内容的哈希值,也是用于存储文件内容的 git 对象的地址(因为 git 本质上是一个内容可寻址的文件系统)建立在它之上的版本控制系统)。
    • &lt;object&gt; 寻址的内容(即 SHA-1 摘要)是否通常部分 &lt;file&gt; 的文件内容?
    • @qazwsx 我不明白你在上一条评论中的问题。你能澄清一下吗?
    • 如果&lt;object&gt;&lt;file&gt; 真的是独立的并且没有任何关系,那么将它们显示在同一行中是没有用的。 &lt;object&gt;值消化的数据内容不就是文件&lt;file&gt;的一部分吗?
    猜你喜欢
    • 2021-08-20
    • 2019-06-13
    • 2017-07-26
    • 2019-04-27
    • 2019-08-27
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多