Git索引到底包含什么,我可以使用什么命令来查看索引的内容?


谢谢你的回答。我知道索引作为一个暂存区,提交的内容在索引中而不是工作树中。我只是好奇一个索引对象由什么组成。我猜它可能是一个文件名/目录名列表,SHA-1对,一种虚拟树?

在Git术语中,是否有任何可以用来列出索引内容的管道命令?


当前回答

Git索引是工作目录和存储库之间的临时区域。您可以使用索引构建一组希望一起提交的更改。创建提交时,提交的是当前在这个索引中的内容,而不是工作目录中的内容。

要查看索引内的内容,发出命令:

git status

当您运行git status时,您可以看到哪些文件是暂存的(当前在您的索引中),哪些文件已被修改但尚未暂存,以及哪些文件完全未被跟踪。

你可以看看这个。谷歌搜索会抛出许多链接,这些链接应该是相当自给自足的。

其他回答

这是你真正需要的,使用这个命令。

$ binwalk指数

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1717          0x6B5           Unix path: /company/user/user/delete.php
1813          0x715           Unix path: /company/user/user/get.php
1909          0x775           Unix path: /company/user/user/post.php
2005          0x7D5           Unix path: /company/user/user/put.php
3373          0xD2D           Unix path: /urban-airship/channel/channel/post.php
3789          0xECD           Unix path: /urban-airship/named-user/named-user/post.php
3901          0xF3D           Unix path: /user/categories/categories/delete.php
4005          0xFA5           Unix path: /user/categories/categories/get.php
4109          0x100D          Unix path: /user/categories/categories/put.php
4309          0x10D5          Unix path: /user/favorites/favorites/delete.php

Git索引是一个二进制文件(通常保存在.git/index中),包含一个排序的路径名列表,每个路径名都有权限和一个blob对象的SHA1;

Git ls-files可以显示索引的内容。请注意,在Git中索引、阶段和缓存是同一件事:它们可以互换使用。

Git索引,或Git缓存,有3个重要的属性:

索引包含生成单个(唯一确定的)树对象所需的所有信息。 索引可以在它定义的树对象和工作树之间进行快速比较。 它可以有效地表示关于不同树对象之间合并冲突的信息,允许每个路径名与所涉及的树的足够信息相关联,以便在它们之间创建三向合并。

来源:

https://mincong.io/2018/04/28/git-index/ https://medium.com/hackernoon/understanding-git-index-4821a0765cf

在回应@ciro-santilli-%e9%83%9d%e6%b5%b7% 4%b8%9c%e5%86% a07 %8a%b6% 97% 855 %85%ad%e5%9b%9b%e4%ba%8b%e4%bb%b6% b3% 95b %e5% e5%8a%9f的指数,am分享输出为其中一个TODO。

如果你添加,那么阶段0将被添加到该路径的索引中,git将知道冲突已被标记为已解决。托朵:检查这个。”

更具体地说,是不同的合并阶段。

0:普通文件,不存在合并冲突 1:基础 2:我们的 3:他们的

关于各个阶段的详细数字表示,在这种情况下一个文件有冲突。

$ git ls-files -s
100644 f72d68f0d10f6efdb8adc8553a1df9c0444a0bec 0       vars/buildComponent.groovy

$ git stash list
stash@{0}: WIP on master: c40172e turn off notifications, temporarily

$ git stash apply
Auto-merging vars/commonUtils.groovy
Auto-merging vars/buildComponent.groovy
CONFLICT (content): Merge conflict in vars/buildComponent.groovy

$ git ls-files -s
100644 bc48727339d36f5d54e14081f8357a0168f4c665 1       vars/buildComponent.groovy
100644 f72d68f0d10f6efdb8adc8553a1df9c0444a0bec 2       vars/buildComponent.groovy
100644 24dd5be1783633bbb049b35fc01e8e88facb20e2 3       vars/buildComponent.groovy

Git索引是工作目录和存储库之间的临时区域。您可以使用索引构建一组希望一起提交的更改。创建提交时,提交的是当前在这个索引中的内容,而不是工作目录中的内容。

要查看索引内的内容,发出命令:

git status

当您运行git status时,您可以看到哪些文件是暂存的(当前在您的索引中),哪些文件已被修改但尚未暂存,以及哪些文件完全未被跟踪。

你可以看看这个。谷歌搜索会抛出许多链接,这些链接应该是相当自给自足的。

我只是想让那个混蛋上擂台。

索引是git中最重要的数据结构之一。 它通过记录路径列表及其对象名称来表示一个虚拟工作树状态,并作为一个staging区域来写出要提交的下一个树对象。 这个状态是“虚拟的”,因为它不需要匹配工作树中的文件,通常也不匹配。

如果我签出一个特殊的提交,git ls-tree会准确地告诉我应该呈现哪些工作文件/对象吗?在ls-tree中,我们说的是哪种树?

例子

git ls-tree -r -l HEAD
git ls-tree -r -l commit-hash

顺便说一句:ls-tree也适用于不签出(-n)克隆的存储库,其中ls-files不返回任何内容。

https://stackoverflow.com/a/56242906/2623045

https://stackoverflow.com/a/67567058/2623045