如何从共享父目录更新多个git存储库,而不用cd'ing到每个repo的根目录?我有以下所有单独的git存储库(不是子模块):
/plugins/cms
/plugins/admin
/plugins/chart
我想一次更新它们,或者至少简化我当前的工作流程:
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull
etc.
如何从共享父目录更新多个git存储库,而不用cd'ing到每个repo的根目录?我有以下所有单独的git存储库(不是子模块):
/plugins/cms
/plugins/admin
/plugins/chart
我想一次更新它们,或者至少简化我当前的工作流程:
cd ~/plugins/admin
git pull origin master
cd ../chart
git pull
etc.
当前回答
我从一些评论和回答中总结了几点:
find . -maxdepth 1 -type d -name .git -execdir git pull \;
其他回答
ls | xargs -I{} git -C {} pull
并行地做:
ls | xargs -P10 -I{} git -C {} pull
我用这个
for dir in $(find . -name ".git")
do cd ${dir%/*}
echo $PWD
git pull
echo ""
cd - > /dev/null
done
Github
Gitfox是一个在所有子回购上执行命令的工具
npm install gitfox -g
g pull
我从一些评论和回答中总结了几点:
find . -maxdepth 1 -type d -name .git -execdir git pull \;
从父目录运行以下命令,在本例中是插件:
find . -type d -depth 1 -exec git --git-dir={}/.git --work-tree=$PWD/{} pull origin master \;
澄清:
找到。搜索当前目录 -type d查找目录,而不是文件 -depth 1表示最大一个子目录深度 -exec {} \;为每次查找都运行自定义命令 git - git-dir ={} /。git——work-tree=$PWD/{} pull git获取单个目录
要使用find,我建议使用echo after -exec来预览,例如:
find . -type d -depth 1 -exec echo git --git-dir={}/.git --work-tree=$PWD/{} status \;
注意:如果没有-depth 1选项,请尝试-mindepth 1 -maxdepth 1。