我有一个文件夹,里面有几个存储库。有什么办法可以让我跑步git branch
或者其他吗git每个文件夹内的命令?
$ ls
project1 project2 project3 project4
我想要类似下面的某种输出
$ command
project1 [master]
project2 [dev]
project3 [master]
project4 [master]
答案1
尝试这个。$1
应该是包含所有存储库的父目录(或使用“.”表示当前目录):
#!/bin/bash
function git_branches()
{
if [[ -z "$1" ]]; then
echo "Usage: $FUNCNAME <dir>" >&2
return 1
fi
if [[ ! -d "$1" ]]; then
echo "Invalid dir specified: '${1}'"
return 1
fi
# Subshell so we don't end up in a different dir than where we started.
(
cd "$1"
for sub in *; do
[[ -d "${sub}/.git" ]] || continue
echo "$sub [$(cd "$sub"; git branch | grep '^\*' | cut -d' ' -f2)]"
done
)
}
您可以将其设为自己的脚本(但替换$FUNCNAME
为$0
),或者将其保留在函数内并在脚本中使用它。
答案2
for dir in */
do (cd $dir && echo "$dir [$(git rev-parse --abbrev-ref HEAD)]")
done
甚至作为别名
alias brall='for dir in $(ls -d */);do (cd $dir && echo "$dir [$(git rev-parse --abbrev-ref HEAD)]") ; done'
它会输出(几乎)你想要的内容。
project1/ [master]
project2/ [dev]
project3/ [master]
project4/ [master]
答案3
我必须做一些调整,因为 git 目录位于一些子子文件夹中。它还支持来自 $1 上指定的 cwd 或 dir。以下是添加到 .bashrc 的别名:
git_branches() {
if [[ -z "$1" ]]; then
search_dir=$(pwd)
echo "Using current dir: '${search_dir}'"
else
search_dir=$1
fi
if [[ ! -d "$search_dir" ]]; then
echo "Invalid dir specified: '${search_dir}'"
return 1
fi
# Subshell so we don't end up in a different dir than where we started.
(
cd "$search_dir"
for dir in $(find . -name .git -type d -prune); do
(
cd $dir
echo "$dir [$(git rev-parse --abbrev-ref HEAD)]"
);
done
)
}
答案4
基本命令是
git branch --show-current
在适当的文件夹中
因此,一个班轮可以是:
for d in project*; do cd "$d" && b="`git branch --show-current`" && cd - >/dev/null && echo "$d [$b]"; done
可以将其设为别名或放入脚本中以用作命令