在2.0版本的git add --update语法中,/(冒号,正斜杠)是什么意思?

Dmi*_*sky 8 git

几个月前我升级了Git,从那时起,我一直在尝试接受以下弃用通知git add --update:

警告:行为"git的添加--update(或-u)"从树的子目录没有路径参数将在Git的2.0改变,不应再使用.要为整个树添加内容,请运行:

git add --update:/(或git add -u:/)

要将命令限制到当前目录,请运行:

git add --update.(或git add -u.)

使用当前的Git版本,该命令仅限于当前目录.

警告本身非常有意义,它为我节省了一些重置.我已经习惯了输入.或者:/,但仍然发现后者非常奇怪,因为它与我遇到的任何其他命令行语法不同.这.是非常令牌:它只是意味着"当前目录",就像在find .,但:/......从未见过,除非在此上下文中.这是什么意思?

我一直认为它是一个表情符号,当然不是这样吗?

tor*_*rek 10

它实际上是现有语法的扩展:这种名称长期以来一直是有效的gitrevisions语法.

以冒号为前缀的名称通常为1表示索引(staging-area)中的路径,与修订名称后跟冒号和路径引用给定修订中的路径的方式相同::/git add分支:三个修订版中的文件版本前.所以:/是foo的版本上演下一个承诺.

但请注意,冒号后跟斜杠通常用于通过提交日志消息搜索提交,如git addgitrevisions 中的示例所示.

这些路径名通常根植于树的顶部(而不是工作树中的任何位置).举例来说,如果你的资料库只有两个文件,但它们被命名为::/,你在/,你还是写:/READMEsub/.您可以README通过强制相对路径名来自动查看git :sub/READMEsub.具有(搜索提交消息的含义,此处不能使用前导斜杠来表示树的顶部,但由于路径名始终从顶部开始,因此不需要.

)但是,在这种情况下,你实际上并不能指出现在正在进行什么 - 你试图添加东西,进行分阶段,为什么现在上演的内容很重要? - :(top,icase)readme也就是说在当前树中添加文件.出于一些古怪的原因,2与其他git命令不同,readme即使使用冒号语法,也可以根据您当前的工作目录工作,所以如果你在ReadMe并且你写了README它就会添加git add ":(top,icase)readme".你不能.从这里来.但是你可以(至少使用git 1.8-我不确定它已经存在了多长时间):/:,其中前导斜杠意味着"转义当前子目录并转到存储库树的顶部".

如果你丢弃其余的路径名,你会得到:(top)- 它确实看起来像一个表情符号!但它引用了存储库顶部的目录.但仅限于:/:.; 对于其他git命令,它表示提交消息搜索字符串.


1意思是"不总是".Git对其许多规则的例外通常是明智的,但是难以解释.:-)

2意思是"我不知道为什么".当然,对于殖民前缀路径是有意义的,但对于以冒号为前缀的路径,为什么呢?(考虑到大量现有代码,它可能更容易实现.)