git命令应该直接在工作目录下运行吗?

时间:2015-12-27 01:16:29

标签: linux git

假设我有一个git工作目录,即具有名为.git的子目录的目录。

我想知道当我运行git命令时当前目录是否重要。 是否可以运行git命令

  • 直接在工作目录

  • 直接位于工作目录(子目录)的某个子目录下

  • 直接位于工作目录的父目录下?

考虑

  • git命令,它可以采用指定某些文件的参数,例如: git add
  • git命令,它不接受指定某些文件的参数,例如: git pullgit push

3 个答案:

答案 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的父目录。

Source

  

git命令,它可以采用指定某些文件的参数,例如: git add,和

这些命令需要知道.git目录的位置以及工作树中路径的相对位置。

  

git命令,它不会采用指定某些文件的参数,例如: git pull,git push。

git pushgit fetch之类的命令需要知道.git目录的位置,但不关心工作树。 git pull会执行git merge,因为它会修改工作树中的文件。{/ p>