我一直在寻找git update-index
的手册页。我只是不明白-g
通过时会发生什么。该选项选择索引中与HEAD不同的文件。但是对这些文件做了什么?“git update-index -g”究竟是什么,没有其他选择呢?
网上很多讨论关于--assume-unchanged
,但我想了解基本功能。
P.S .:我想我明白索引是做什么的,git add
和git reset
是如何工作的。
我一直在寻找git update-index
的手册页。我只是不明白-g
通过时会发生什么。该选项选择索引中与HEAD不同的文件。但是对这些文件做了什么?“git update-index -g”究竟是什么,没有其他选择呢?
网上很多讨论关于--assume-unchanged
,但我想了解基本功能。
P.S .:我想我明白索引是做什么的,git add
和git reset
是如何工作的。
从我阅读手册页时,它什么都不做。因为:
Modifies the index or directory cache. Each file mentioned is updated
into the index and any unmerged or needs updating state is cleared.
“每个文件”是空集,如果没有文件参数,我找不到任何地方,特殊的语义被分配到空的情况。
然而,git update-index
并检查它是否处于GIT中回购:
~$ git update-index
fatal: Not a git repository (or any of the parent directories): .git
~$ echo $?
128
因此,git update-index
不带参数至少执行健全性检查,并提供一条错误消息和终止状态。如果它确实没有其他的东西,它可以在脚本中用来检查它们是否在git仓库中。请注意,其他命令如git rev-parse
也可以不带参数。
如果通过“无参数”表示“没有选项,但带有文件参数存在”,那么它所做的就是对那些已经在git中的指定文件执行动作。遇到未跟踪文件的文件参数时,它会给出错误诊断,因为未指定--add
。它以失败的终止状态退出并且索引未修改。
所以基本上没有选择它提供了一个完整性检查:或者它能够对所有指定的文件进行操作,否则它不会执行任何操作。这样可以防止意图只用于跟踪文件时的情况。
的-g/--again
的目的是提供重复上已经上演这些文件git update-index
,经过修改的一种方式。它对这些文件的作用是再次更新它们,以便索引与工作副本匹配。
您可能会遇到HEAD
提交,暂存索引和工作副本中给定文件不同的情况。这种情况发生在对文件进行破解时,然后使用git add
(或git update-index
)对其进行分级,此时索引与工作副本相同;然后你再次攻击它。现在它与索引不同,与HEAD
不同。通过再次将其更新为索引,可以将索引与工作副本同步,因此唯一不同的是HEAD
。
请注意,当您执行git diff
时,会将工作文件与索引进行比较。要查看索引到头部的差异,请执行git diff --cached
,并且使用git diff HEAD
。这样你就可以在一个文件上进行攻击,然后再对其进行打包,然后再次对其进行攻击,git diff
会向您显示上演和正在进行的最新黑客攻击。原始黑客是git diff --cached
,整体合并黑客是git diff HEAD
。有了这个,你可以探索git update-index
有什么影响。
似乎-g
与文件参数都非常有用:git update-index -g file-j file-k
意味着“在所有已上演修改和这样做,也是在新砍死file-j
和file-k
东西做update-index
”。
谢谢。 “通过再次将其更新为索引,将索引与工作副本同步”正是我无法理解的。 – Arkadiy