我需要运行以下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
答案 0 :(得分:0)
如果您所有的项目和存储库都以结构化方式签出,我会编写一个bash循环。
假设您有目录proj1
,proj2
等,每个目录都包含其存储库proj1/repo1
,pro1/repo2
等,那么这应该起作用:
for repo in */*/.git; do
base=`dirname $repo`
echo Entering $base
pushd $base
../../script.sh
popd
done
该解决方案利用了以下事实:每个Git沙箱的根都有一个.git
目录。如果您的结构中没有其他内容,只需使用*/*
即可。
如果您的存储库位于目录结构的不同深度,则可以使用以下查找命令替换*/*/.git
:find . -maxdepth 3 -name .git
:
for repo in `find . -maxdepth 3 -name .git`; do
...
调整-maxdepth
选项以获取您的所有存储库。您可以忽略它,但是find
也将毫无意义地浏览您所有回购的内容。