複数のフォルダ/ストレージから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

エイリアスとして作成するか、スクリプトに入れてコマンドとして使用できます。

関連情報