不在git目录中时进行git pull

假设我有一个目录/X/Y,这是一个git存储库。是否可以通过某种方式调用git pull来自inside 的命令/X,但以/X/Y目录为目标?

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


慕姐8265434
浏览 1201回答 3
3回答

叮当猫咪

编辑:可能有一个错误git pull,或者您无法使用该命令执行您想做的事情。但是,您可以通过获取和合并来实现:cd /Xgit --git-dir=/X/Y/.git fetchgit --git-dir=/X/Y/.git --work-tree=/X/Y merge origin/master原始答案:假设您正在运行bash或类似程序,则可以这样做(cd /X/Y; git pull)。在git的手册页指定一些变量(请参阅“Git仓库”),似乎像他们应该帮助,但我不能让他们工作的权利(与我在/ tmp / ggg2库):GIT_WORK_TREE=/tmp/ggg2 GIT_DIR=/tmp/ggg2/.git git pullfatal: /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标志。

小怪兽爱吃肉

从git 1.8.5(2013年第四季度)开始,您将能够“使用Git命令,而不必更改目录”。就像“ make -C <directory>”一样,“ git -C <directory> ...”告诉Git在做其他事情之前要去那里。见提交44e1e4由纳兹里Ramliy:在不离开当前目录的情况下,需要更多的按键才能调用其他目录中的Git命令:(cd ~/foo && git status)&nbsp; git --git-dir=~/foo/.git --work-tree=~/foo status&nbsp; 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 statusgit -C ../.. grep foofor d in d1 d2 d3; do git -C $d svn rebase; done自Git 2.3.4(2015年3月)以来,由Karthik Nayak()提交6a536e2,将在空时将“ ”视为无操作。KarthikNayakgitgit -C '<path>'<path>' git -C ""'无故死于错误“ Cannot change to ''”,而shell将cd“”“视为无操作。以shell的行为为先例,还教导git将-C“”'视为无操作。4年后,Git 2.23(Q3 2019)证明了' git -C ""'有效并且不会更改目录自6a536e2以来,它的行为一直如此(git:空git -C '<path>'时将“ ”视为无操作<path>,2015-03-06,Git v2.3.4)。这意味着现在(最终)的文档包括:如果' <path>'存在但为空,例如-C "",则当前工作目录保持不变。
打开App,查看更多内容
随时随地看视频慕课网APP