假设我有一个git工作目录,即具有名为.git
的子目录的目录。
我想知道当我运行git命令时当前目录是否重要。 是否可以运行git命令
直接在工作目录
直接位于工作目录(子目录)的某个子目录下
直接位于工作目录的父目录下?
考虑
git add
和git pull
,git push
。答案 0 :(得分:3)
直接位于工作目录的父目录下?
实际上,只要您引用git repo,就可以在任何地方运行它:
git --git-dir=/path/to/my/repo/.git add .
这意味着无论您身在何处(。:当前文件夹)都将被视为您的工作树。甲
您甚至可以指定工作树:
git --work-tree=/a/path --git-dir=/path/to/my/repo/.git add .
在后一种情况下,您甚至可以在任何地方执行最后一个命令。 “.
”将是工作树/a/path
。
Since git 1.8.5, you also have the -C
option:
git -C /path/to/my/repo add .
同样,您可以在任何地方执行它,但命令将在内部首先执行cd /path/to/my/repo
,然后执行add .
。这意味着“.
”实际上将是/path/to/my/repo
。
Finally, since git 2.5,git repo支持多个工作树,因此您可以在不包含子文件夹.git
的文件夹中执行命令(但实际上是{{1}的一种符号链接})
答案 1 :(得分:1)
可以在两个
中运行这两种类型的命令直接在工作目录下 直接在(子目录...)工作目录
的某个子目录下
请注意,您应该使用相对于
目录的路径您不能(默认情况下)在父目录中运行任何git命令。您将收到一条消息,表明您不在任何仓库中。
答案 2 :(得分:1)
我想知道当我运行git命令时当前目录是否重要。
确实如此。 git在当前工作目录中搜索.git子目录,如果找不到它,则会搜索父目录,依此类推,直到找到它为止。
- 直接在工作目录下
是
- 直接位于工作目录(子目录)
的某个子目录下
是
- 直接位于工作目录的父目录下?
不,默认情况下不是。可以告诉git在哪里找到.git目录,这样它就不会搜索,但这不是通常的操作模式。
相关环境变量的文档:
GIT_DIR 是
.git
文件夹的位置。如果没有指定,Git会在目录树中向上走,直到它到达~
或/
,在每一步都查找.git
目录。GIT_WORK_TREE 是非裸存储库的工作目录根目录的位置。如果未指定,则使用
$GIT_DIR
的父目录。
git命令,它可以采用指定某些文件的参数,例如: git add,和
这些命令需要知道.git目录的位置以及工作树中路径的相对位置。
git命令,它不会采用指定某些文件的参数,例如: git pull,git push。
git push
或git fetch
之类的命令需要知道.git目录的位置,但不关心工作树。 git pull
会执行git merge
,因为它会修改工作树中的文件。{/ p>