여러 폴더/저장소에서 git 브랜치 가져오기

여러 폴더/저장소에서 git 브랜치 가져오기

여러 저장소가 있는 폴더가 있습니다. 내가 달릴 수 있는 방법이 없을까 git branch?자식각 폴더 내부의 명령?

$ 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

별칭으로 만들거나 스크립트에 넣어 명령으로 사용할 수 있습니다.

관련 정보