从多个文件夹/存储库获取 git 分支

从多个文件夹/存储库获取 git 分支

我有一个文件夹,里面有几个存储库。有什么办法可以让我跑步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

可以将其设为别名或放入脚本中以用作命令

相关内容