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