首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >运行git pull覆盖所有子目录

运行git pull覆盖所有子目录
EN

Stack Overflow用户
提问于 2010-08-17 04:39:36
回答 16查看 133K关注 0票数 293

我如何才能从它们的共享父目录中更新多个git存储库,而不是进入每个存储库的根目录?我有以下内容,它们都是独立的git存储库(不是子模块):

代码语言:javascript
复制
/plugins/cms
/plugins/admin
/plugins/chart

我想一次性更新它们,或者至少简化我当前的工作流程:

代码语言:javascript
复制
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull

等。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2012-09-19 21:00:14

从父目录运行以下命令,本例中为plugins

代码语言:javascript
复制
find . -type d -depth 1 -exec git --git-dir={}/.git --work-tree=$PWD/{} pull origin master \;

澄清一下:

  • find .搜索当前的directory
  • -type d以查找目录,而不是files
  • -depth 1,最大深度为一个sub-directory
  • -exec {} \;为每个find
  • git --git-dir={}/.git --work-tree=$PWD/{} pull运行一个自定义命令git拉取各个目录

要使用find,我建议在-exec之后使用echo进行预览,例如:

代码语言:javascript
复制
find . -type d -depth 1 -exec echo git --git-dir={}/.git --work-tree=$PWD/{} status \;

注意:如果-depth 1选项不可用,请尝试-mindepth 1 -maxdepth 1

票数 382
EN

Stack Overflow用户

发布于 2015-03-16 16:51:42

代码语言:javascript
复制
ls | xargs -I{} git -C {} pull

要并行执行,请执行以下操作:

代码语言:javascript
复制
ls | xargs -P10 -I{} git -C {} pull
票数 243
EN

Stack Overflow用户

发布于 2015-02-05 23:40:59

比leo的解决方案更低的技术含量:

代码语言:javascript
复制
for i in */.git; do ( echo $i; cd $i/..; git pull; ); done

这将更新工作目录中的所有Git存储库。不需要明确列出它们的名称("cms“、"admin”、"chart")。"cd“命令只影响子subshell (使用括号生成)。

票数 90
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3497123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档