git --git-dir没有按预期工作

时间:2009-09-06 18:08:55

标签: git

我正在尝试从与我不同的目录运行git。例如,如果我在:

cd /home/domain/
git status << runs perfect ie
# On branch master
# Your branch is ahead of 'origin/master' by 6 commits.

所以现在我想使用--git-dir选项从不同的目录运行此命令。

让我说我在root/并试试这个:

git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

我还尝试包含.git文件夹,即

git --git-dir="/home/domain/.git/" status

但是这看起来好像是试图从root运行git,即从我的域文件夹中删除所有内容并在root中添加所有内容。

希望有人可以就我做错的事情提出建议。

4 个答案:

答案 0 :(得分:286)

您还必须定义工作目录。让我感到困惑,但这是一种灵活性。

git --git-dir=/mycode/.git --work-tree=/mycode status

您可以多阅读here

答案 1 :(得分:121)

开始git 1.8.5(应该在下周出来),它会更简单:

 git -C "/home/domain/" status

无需再设置--git-dir--work-tree


通过 commit 44e1e4

查看Nazri Ramliy
  

在不离开当前目录的情况下,需要更多的按键才能在不同的目录中调用git命令:

     
      
  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-dir=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2.   
  3. (cd ../..; git grep foo)
  4.   
  5. for d in d1 d2 d3; do (cd $d && git svn rebase); done
  6.         

    上面显示的方法对于脚本编写是可以接受的,但对于快速命令行调用来说太麻烦了。

         

    使用这个新选项,可以用更少的击键来完成上述操作:

         
        
    1. git -C ~/foo status
    2.   
    3. git -C ../.. grep foo
    4.   
    5. for d in d1 d2 d3; do git -C $d svn rebase; done
    6.   

答案 2 :(得分:40)

根据您上面的评论,听起来您仍然遇到问题:

root@erx [/]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master
fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree

听起来你可能打算从crontab或其他东西运行它。最好先使用cd切换到工作目录。例如:

root@erx [/]# (cd /home/domain && git pull origin master)

这将暂时(在子shell中,这是括号所做的)将当前目录更改为/home/domain,然后运行git pull origin master。命令完成后,您当前的目录将保持命令之前的状态。

答案 3 :(得分:1)

git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'

使用Git 2.26(2020年第一季度),文档更加清晰。

(使用环境变量或使用“ GIT_DIR”选项)指定git --git-dir=<where> cmd在何处的效果是禁用存储库发现

由于新用户经常会感到困惑,这在文档中增加了一些压力。

请参见commit d82ad54Heba Waly (HebaWaly)(2020年1月30日)。
(由Junio C Hamano -- gitster --commit 17e4a1b中合并,2020年2月12日)

git:更新--git-dir的文档

签名人:Heba Waly
帮助者:Junio C Hamano

git --git-dir <path>有点令人困惑,有时无法按用户期望的那样工作。

例如,如果用户运行git --git-dir=<path> status,除非另有说明,否则git将跳过存储库发现算法,并将工作树分配给用户的当前工作目录。
如果此分配错误,则输出将不符合用户的期望。

此补丁更新了文档,使其更加清晰。

所以documentation for git --git-dir现在包括:

--git-dir=<path>:

设置存储库的路径(“ .git”目录)。
也可以通过设置GIT_DIR环境变量来控制。
它可以是当前工作目录的绝对路径或相对路径。

使用此选项(或.git环境变量)指定“ GIT_DIR”目录的位置会关闭试图用“ { {1}}”子目录(这是发现存储库和工作树的顶层的方式),并告诉Git您位于工作树的顶层。

如果您不在工作树的顶层目录中,则应使用.git选项(或--work-tree=<path>环境变量)告诉Git工作树的顶层位置在哪里。 )