如何从共享父目录更新多个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.
当前回答
我用这个
for dir in $(find . -name ".git")
do cd ${dir%/*}
echo $PWD
git pull
echo ""
cd - > /dev/null
done
Github
其他回答
我用的是这个:
find . -name ".git" -type d | sed 's/\/.git//' | xargs -P10 -I{} git -C {} pull
通用:更新当前目录下的所有git存储库。
如果你有很多git仓库的子dirs,你可以使用parallel
ls | parallel -I{} -j100 '
if [ -d {}/.git ]; then
echo Pulling {}
git -C {} pull > /dev/null && echo "pulled" || echo "error :("
else
echo {} is not a .git directory
fi
'
这应该是自动发生的,只要cms, admin和chart都是存储库的一部分。
一个可能的问题是这些插件都是git子模块。
运行git帮助子模块查看更多信息。
EDIT
在bash中这样做:
cd plugins
for f in cms admin chart
do
cd $f && git pull origin master && cd ..
done
ls | xargs -I{} git -C {} pull
并行地做:
ls | xargs -P10 -I{} git -C {} pull
你可以试试这个
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
此外,您还可以通过添加一个&&参数来添加自定义输出。
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull && git status" \;