如何从共享父目录更新多个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.
当前回答
Gitfox是一个在所有子回购上执行命令的工具
npm install gitfox -g
g 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" \;
2010年原答案:
如果所有这些目录都是单独的git repo,则应该将它们作为子模块引用。
这意味着你的“起源”将是远程回购“插件”,其中只包含对子回购“cms”,“管理”,“图表”的引用。
git拉出,然后更新git子模块,就可以实现你想要的结果。
2016年1月更新:
在Git 2.8(2016年第一季度)中,你将能够使用Git fetch——recursive -submodules -j2并行地获取子模块。 参见“如何使用git克隆-递归加速/并行化git子模块的下载?”
前5个答案都不适合我,而且这个问题是关于目录的。
这工作:
for d in *; do pushd $d && git pull && popd; done
我的拙见是
显示当前路径(使用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