如何从共享父目录更新多个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

其他回答

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

并行地做:

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

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

ls | parallel git -C {} pull

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

这工作:

for d in *; do pushd $d && git pull && popd; done

实际上,如果你不知道子文件夹是否有一个git repo,最好是让find get repos为你:

find . -type d -name .git -exec git --git-dir={} --work-tree=$PWD/{}/.. pull origin master \;

PowerShell的等效代码是:

Get-ChildItem -Recurse -Directory -Hidden -Filter .git | ForEach-Object { & git --git-dir="$($_.FullName)" --work-tree="$(Split-Path $_.FullName -Parent)" pull origin master }

我从一些评论和回答中总结了几点:

find . -maxdepth 1 -type d -name .git -execdir git pull \;