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

Lee*_*Lee 205 git

我试图从一个不同于我的目录运行git.所以例如,如果我在:

cd /home/domain/
git status << runs perfect ie
# On branch master
# Your branch is ahead of 'origin/master' by 6 commits.
Run Code Online (Sandbox Code Playgroud)

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

所以,让我说我在root/尝试这个:

git --git-dir="/home/domain/" status
## Error 
fatal: Not a git repository: '/home/domain/'
Run Code Online (Sandbox Code Playgroud)

我也尝试过包含.git文件夹ie

git --git-dir="/home/domain/.git/" status
Run Code Online (Sandbox Code Playgroud)

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

希望有人能就我做错的事情提出建议.

Jon*_*tar 304

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

git --git-dir=/mycode/.git --work-tree=/mycode status
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多内容

  • @NickYeates借调!当我使用〜来引用我的主目录时,我遇到了一个问题,例如`git --git-dir =〜/ src/s3cmd/.git --work-tree =〜/ src/s3cmd pull`不起作用但是`git --git-dir =/home/username/src/s3cmd/.git --work-tree =/home/username/src/s3cmd pull` (4认同)
  • 一点澄清:`git --git-dir ="$ HOME/foo/.git"--work-tree ="$ HOME/foo"status (4认同)
  • 谢谢这个工作!同意这是令人困惑的.它叫做Keep It Simple Stupid.你几乎总能提供灵活性,同时给出最有意义的默认值VS命令根本不起作用. (3认同)
  • @Nick同意,你会想如果没有指定`--git-dir`,它会检查是否存在`/ mycode/.git`并在抛出错误之前使用它. (3认同)

Von*_*onC 130

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

 git -C "/home/domain/" status
Run Code Online (Sandbox Code Playgroud)

无需设置--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

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

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

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

  • 我因尝试使用-C标志_after_ git命令而跳闸(例如git status -C &lt;path&gt;`将不起作用!) (3认同)

Gre*_*ill 41

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

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.命令完成后,您当前的目录将保持命令之前的状态.