git --git-dir not working as expected

匿名 (未验证) 提交于 2019-12-03 03:04:01

问题:

I am trying to run git from a different directory than I am in. So for example if I am in:

cd /home/domain/ git status 

So now I want to run this command from a different directory using the --git-dir option.

So lets say I'm in root/ and try this:

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

I've also tried to include the .git folder i.e.

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

But this looks like it's trying to run git from the root, i.e. deleting everything from my domain folder and adding everything in root.

Hope someone can advise on what I'm doing wrong.

回答1:

You have to define the working dir as well. Confusing I know but it's a flexibility thing.

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

You can read a little more here



回答2:

Starting git 1.8.5 (which should be out next week), it will be even simpler:

 git -C "/home/domain/" status 

No need to set --git-dir and --work-tree anymore!


See commit 44e1e4 by Nazri Ramliy:

It takes more keypresses to invoke git command in a different directory without leaving the current directory:

  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

The methods shown above are acceptable for scripting but are too cumbersome for quick command line invocations.

With this new option, the above can be done with fewer keystrokes:

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


回答3:

Based on your comment above, it sounds like you are still running into a problem:

 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 

It sounds like you might be intending to run this from crontab or something. You may be better off using cd to switch to your working directory first. For example:

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

This will temporarily (in a subshell, which is what the parentheses do) change the current directory to /home/domain, and then run git pull origin master. After the command is complete, your current directory remains whatever it was before the command.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!