如何在 git 索引上打印当前文件

  • 本文关键字:打印 文件 索引 git git
  • 更新时间 :
  • 英文 :


我可以使用以下命令打印当前提交的树:

git cat-file -p master^{tree}
100644 blob 8fe01e69e28f7c6997c0f5372c015363947582d8    .angular-cli.json
100644 blob 6975847ed5aa229532141a971337caca0a401451    .dockerignore
100644 blob 1f354482f8681a1b017bc4fdde17a4802e84b06a    .editorconfig
100644 blob 9c4b02c9bd7338416bcb4037c5d5fac4c116bca5    .env.example
040000 tree d9e02522647d4f28dc40f62dca564afa48fba019    .github

我现在想知道如何在当前索引、暂存文件中打印文件?我正在寻找像 git cat-file 这样的低级命令,而不是高级命令。

我看到有这个index文件:

ls .git/index 
.git/index

但是打印其内容的命令是什么(同样是低级命令,带有此文件的参数(?

git cat-file只打印对象(树、斑点等(的内容。 如果要显示索引的内容,则需要名称相似但不同的git ls-files。 使用 --stage 命令显示舞台:

$ git ls-files --stage
100644 234d33c1e3554c5f3428f0d7d5c508e4cec6d148 0   README.md
100644 efdf34514e7d7f71ef1a53c441fabbcef39c7087 0   src/foo.h
100644 a2d78b7702b46a25dd1fe86ec230a7911ed18e36 0   src/foo.c
100644 7807599d8d4971566e3b92e474ee88ad9f0217aa 0   test.c

这将显示索引的内容以及阶段信息,包括对象 ID、阶段级别和文件模式。 您还可以显示磁盘缓存信息的内容:时间戳和文件大小等元数据,git 使用它来确定文件是否可能在磁盘上发生了更改并需要检查。 若要查看该信息,可以使用 --debug 标志:

$ git ls-files --debug
README.md
  ctime: 1523823765:79574029
  mtime: 1523823765:79245702
  dev: 16777221 ino: 34669602
  uid: 501      gid: 20
  size: 8253    flags: 0
src/foo.c
  ctime: 1523830223:524847547
  mtime: 1523830223:524623074
  dev: 16777221 ino: 34676974
  uid: 501      gid: 20
  size: 4071    flags: 0
src/foo.h
  ctime: 1523752084:2627730
  mtime: 1523752084:2060254
  dev: 16777221 ino: 34621108
  uid: 501      gid: 20
  size: 36809   flags: 0
tests/response.c
  ctime: 1523826062:78659995
  mtime: 1523826062:78659995
  dev: 16777221 ino: 34672776
  uid: 501      gid: 20
  size: 30615   flags: 0

这里接受的答案是不正确的。

git ls-files--stage选项并不意味着"仅列出暂存文件";相反,它仅修改输出的格式。从git ls-files手册页:

-s, --stage

在输出中显示暂存内容的模式位、对象名称和暂存编号。

若要仅查看索引中的文件,可以使用:

$ git diff-index HEAD

例如,如果我有一个包含三个文件的存储库:

$ git ls-files
file1
file2
file3

我添加一个新文件:

$ git add file4

然后git ls-files --stage将显示存储库中的所有文件,包括索引:

$ git ls-files --stage
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0   file1
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0   file2
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0   file3
100644 6baefff73e8fec350b060518bd108aa5d80b24ed 0   file4

git diff-index HEAD将仅显示暂存文件:

$ git diff-index HEAD
:000000 100644 0000000000000000000000000000000000000000 6baefff73e8fec350b060518bd108aa5d80b24ed A  file4

如果你只想要文件名,--name-only标志会得到你想要的:

$ git diff-index --name-only HEAD
file4

你可以尝试使用 git ls 文件:
git-scm.com/docs/git-ls-files -显示有关索引和工作树中的文件的信息

附言刚刚将其从评论中移出。

最新更新