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

我试图从一个不同的目录运行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 

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

希望有人可以build议我做错了什么。

您还必须定义工作目录。 混淆我知道,但这是一个灵活的事情。

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

你可以在这里阅读更多

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

  git -C "/home/domain/" status 

不需要设置--git-dir--work-tree了!


Nazri Ramliy的 提交 44e1e4

在不离开当前目录的情况下,需要更多按键来调用不同目录中的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. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

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

有了这个新的选项,上面的操作可以用更less的击键来完成:

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

根据你上面的评论,这听起来像你仍然遇到一个问题:

 root @ erx [/]#git --git-dir = / home / domain / .git --work-tree = / home / domain / pull origin master
致命的:/ usr / local / libexec / git-core / git-pull不能在没有工作树的情况下使用

这听起来像你可能打算从crontab或其他东西运行。 首先使用cd切换到您的工作目录可能会更好。 例如:

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

这将临时(在一个子shell中,这是括号所做的)将当前目录更改为/home/domain ,然后运行git pull origin master 。 命令完成后,您的当前目录将保留在命令之前的任何内容。