2015-01-26 75 views

回答

2

看没有比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><object>是相应斑点的SHA,即所讨论文件的内容的唯一标识符。
  • <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,因为它们具有相同的内容。

+0

”和“”之间的关系是什么? – qazwsx 2015-01-26 21:59:25

+0

@qazwsx该对象是文件内容的散列,也是用于存储文件内容的git对象的地址(因为git本质上是一个内容可寻址的文件系统,它恰好具有构建的版本控制系统在它的上面)。 – hobbs 2015-01-26 22:16:41

+0

由“”(即SHA-1摘要)寻址的内容通常是“”文件内容的一部分吗? – qazwsx 2015-01-26 22:18:47

相关问题