如何从共享父目录更新多个git存储库,而不用cd'ing到每个repo的根目录?我有以下所有单独的git存储库(不是子模块):

/plugins/cms
/plugins/admin
/plugins/chart

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

cd ~/plugins/admin
git pull origin master
cd ../chart
git pull

etc.


当前回答

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

for i in */.git; do ( echo $i; cd $i/..; git pull; ); done

这将更新工作目录中的所有Git存储库。不需要显式列出他们的名字(“cms”,“admin”,“chart”)。“cd”命令只影响子shell(使用圆括号派生)。

其他回答

最紧凑的方法,假设所有子dirs都是git回购:

ls | parallel git -C {} pull

我的拙见是

显示当前路径(使用python,方便和只是工作,参见如何获得文件的完整路径?) 直接查找.git子文件夹:在非git子文件夹中发出git命令的几率很低 删除一些查找警告

遵循:

find . \
    -maxdepth 2 -type d \
    -name ".git" \
    -execdir python -c 'import os; print(os.path.abspath("."))' \; \
    -execdir git pull \;

当然,你也可以添加其他带有-execdir选项的git命令,例如显示分支:

find . \
    -maxdepth 2 -type d \
    -name ".git" \
    -execdir python -c 'import os; print(os.path.abspath("."))' \; \
    -execdir git branch \;
    -execdir git pull \;

我用这个

for dir in $(find . -name ".git")
do cd ${dir%/*}
    echo $PWD
    git pull
    echo ""
    cd - > /dev/null
done

Github

前5个答案都不适合我,而且这个问题是关于目录的。

这工作:

for d in *; do pushd $d && git pull && popd; done
ls | xargs -I{} git -C {} pull

并行地做:

ls | xargs -P10 -I{} git -C {} pull