如何在多个git存储库和项目中执行shell脚本?

时间:2019-01-28 14:12:52

标签: git shell

我需要运行以下shell脚本,以列出多个存储库和项目中的合并和非合并分支。例如

- proj 1
   repo1    repo2    repo3

- proj 2
   repo1    repo2    repo3

- proj 3
   repo1    repo2    repo3

Script.sh

#!/bin/sh

echo "Merged branches"
for branch in `git branch -r --merged | grep -v HEAD`;do echo -e `git log --no-merges -n 1 --format="%ci, %cr, %an, %ae, "  $branch | head -n 1` \\t$branch; done | sort -r

echo ""
echo "Not merged branches"
for branch in `git branch -r --no-merged | grep -v HEAD`;
do echo -e `git log --no-merges -n 1 --format="%ci, %cr, %an, %ae, " $branch | head -n 1` \\t$branch; done | sort -r

1 个答案:

答案 0 :(得分:0)

如果您所有的项目和存储库都以结构化方式签出,我会编写一个bash循环。

假设您有目录proj1proj2等,每个目录都包含其存储库proj1/repo1pro1/repo2等,那么这应该起作用:

for repo in */*/.git; do
   base=`dirname $repo`
   echo Entering $base
   pushd $base
   ../../script.sh
   popd
done

该解决方案利用了以下事实:每个Git沙箱的根都有一个.git目录。如果您的结构中没有其他内容,只需使用*/*即可。

如果您的存储库位于目录结构的不同深度,则可以使用以下查找命令替换*/*/.gitfind . -maxdepth 3 -name .git

for repo in `find . -maxdepth 3 -name .git`; do
   ...

调整-maxdepth选项以获取您的所有存储库。您可以忽略它,但是find也将毫无意义地浏览您所有回购的内容。