我如何才能从它们的共享父目录中更新多个git存储库,而不是进入每个存储库的根目录?我有以下内容,它们都是独立的git存储库(不是子模块):
/plugins/cms
/plugins/admin
/plugins/chart
我想一次性更新它们,或者至少简化我当前的工作流程:
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull
等。
发布于 2012-09-19 21:00:14
从父目录运行以下命令,本例中为plugins
:
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 {} \;
为每个findgit --git-dir={}/.git --work-tree=$PWD/{} pull
运行一个自定义命令git拉取各个目录要使用find,我建议在-exec
之后使用echo
进行预览,例如:
find . -type d -depth 1 -exec echo git --git-dir={}/.git --work-tree=$PWD/{} status \;
注意:如果-depth 1
选项不可用,请尝试-mindepth 1 -maxdepth 1
。
发布于 2015-03-16 16:51:42
ls | xargs -I{} git -C {} pull
要并行执行,请执行以下操作:
ls | xargs -P10 -I{} git -C {} pull
发布于 2015-02-05 23:40:59
比leo的解决方案更低的技术含量:
for i in */.git; do ( echo $i; cd $i/..; git pull; ); done
这将更新工作目录中的所有Git存储库。不需要明确列出它们的名称("cms“、"admin”、"chart")。"cd“命令只影响子subshell (使用括号生成)。
https://stackoverflow.com/questions/3497123
复制相似问题