使用git add -u
时,我可以提供一个路径作为最后一个参数,例如git add -u .
。如何给出存储库根路径?
我想用它来快速将所有跟踪文件的更改添加到索引中,包括更改目录树中的文件。
示例
$ git status # On branch mul # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: ../../../foo.mwb # no changes added to commit (use "git add" and/or "git commit -a")
答案 0 :(得分:12)
冒号:
在这里有帮助,你可以通过:/
来引用存储库的根目录:
git init test
cd test
mkdir a
touch a/a
git add a
git commit -m a
# Here comes the interesting part:
cd a
touch ../root
git add :/
git commit -m root
上面的脚本初始化了一个玩具存储库,该存储库在子目录a
中包含一个文件a
。在“有趣的部分”中,它更改为a
目录,在存储库的根目录中创建一个空文件,并使用:/
引用添加它。 -u
开关正常工作(脚本中未显示)。
<rev>:<path>
,例如HEAD:README
,:README
,master:./README
后缀
:
后跟一个路径,命名在冒号前的部分命名的树形对象中给定路径上的blob或树。:path
(在冒号前面有一个空白部分)是下面描述的语法的特例:在给定路径的索引中记录的内容。以./
开头的路径或../
是相对于当前工作目录的。给定路径将转换为相对于工作树的根目录。这对于从与工作树具有相同树结构的提交或树中寻址blob或树非常有用。
不幸的是,bash
自动完成功能对:/
构造不起作用。
这related question询问如何找到存储库的绝对路径;当然,您也可以按top-voted answer。
中的说明git add $(git rev-parse --show-toplevel)
进行操作
答案 1 :(得分:0)
相关问题:What does "git add -A :/" do?
the documentation of git-add
最近的措辞是:git add <options> <pathspec>...
。 :/
上下文中的git-add
是 pathspec 。 pathspec 记录在gitglossary(7)中,其中描述了:
具有特殊含义作为 pathspec 的第一个字符。请参阅my answer for more details。