为了账号安全,请及时绑定邮箱和手机立即绑定

不在git目录中时进行git pull

不在git目录中时进行git pull

Git
汪汪一只猫 2019-12-10 13:08:06
假设我有一个目录/X/Y,这是一个git存储库。是否可以通过某种方式调用git pull来自inside 的命令/X,但以/X/Y目录为目标?编辑:我想我特别想知道:是否可以使用git命令来执行此操作,而不必更改目录?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

编辑:


可能有一个错误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仓库”),似乎像他们应该帮助,但我不能让他们工作的权利(与我在/ 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标志。



查看完整回答
反对 回复 2019-12-11
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

从git 1.8.5(2013年第四季度)开始,您将能够“使用Git命令,而不必更改目录”。


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


见提交44e1e4由纳兹里Ramliy:


在不离开当前目录的情况下,需要更多的按键才能调用其他目录中的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()提交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 "",则当前工作目录保持不变。



查看完整回答
反对 回复 2019-12-11
  • 3 回答
  • 0 关注
  • 387 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信