git pull而不在git目录中

假设我有一个目录/X/Y ,它是一个git仓库。 是否有可能以某种方式调用命令,如从/X git pull ,但是定位到/X/Y目录?

编辑:我想我特别想知道:是否有可能使用git命令执行此操作,但不必更改目录?

注意:我接受了VonC的答案,因为它比以前的选项更优雅。 对于运行Git超过1.8.5的人,请参阅下面的bstpierre的答案。


启动git 1.8.5(2013年第4季度)后,您将能够“使用Git命令,但无需更改目录”。

就像“ make -C <directory> ”一样, git -C <directory> ... ”告诉Git在做其他事情之前先去那里

参见Nazri Ramliy的承诺44e1e4

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

  • (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-tree=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  • (cd ../..; git grep foo)
  • for d in d1 d2 d3; do (cd $d && git svn rebase); done
  • 上面显示的方法可用于脚本编写,但对于快速命令行调用而言太麻烦。

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

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

  • 由于Git 2.3.4(2015年3月)以及Karthik Nayak( KarthikNayak )提交6a536e2, <path>为空时git会将“ git -C '<path>' ”视为无操作。

    ' git -C "" '''无用地死于错误' Cannot change to '' ”,而shell将cd“”视为无操作。
    把贝壳的行为当成先例,教git把C作为无操作对象。


    编辑

    有一个git pull错误,或者你不能完成你想用这个命令做的事情。 但是,您可以通过获取和合并来完成此操作:

    cd /X
    git --git-dir=/X/Y/.git fetch
    git --git-dir=/X/Y/.git --work-tree=/X/Y merge origin/master
    

    原始答案

    假设你正在运行bash或类似的,你可以做(cd /X/Y; git pull)

    git手册页指定了一些看起来应该帮助的变量(请参阅“git Repository”),但我无法使它们正常工作(使用/ tmp / ggg2中的存储库):

    GIT_WORK_TREE=/tmp/ggg2 GIT_DIR=/tmp/ggg2/.git git pull
    fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
    

    运行下面的命令,而我的cwd是/ tmp更新回购,但更新的文件出现在/ tmp而不是工作树/ tmp / ggg2中:

    GIT_DIR=/tmp/ggg2/.git git pull
    

    另请参见对类似问题的回答,该问题演示了--git-dir--work-tree标志。


    你可以把它包装在一个bash脚本或git别名中:

    cd /X/Y && git pull && cd -
    
    链接地址: http://www.djcxy.com/p/18871.html

    上一篇: git pull while not in a git directory

    下一篇: Comparing two branches in Git?