質問: git bash-ls show gitrepoフォルダー / c/toolsという3つのフォルダーがあるフォルダーがあります。以下のようなコマンドが欲しい$ ls --show-repositories toolsはgitリポジトリではありませんが、tools/myprojectとtools/myappはどちらもgitリポジトリです。私が欲しい出力は次のとおりです。drwxr-xr-x 1 0018121 domain users 0 dec 14 14:33 myproject/ (develop) drwxr-xr-x 1 0018121 domain users 0 dec 14 14:17 data/ drwxr-xr-x 1 0018121 domain users 0 dec 14 12:08 myapp/ (master) -rw-r--r-- 1 0018121 domain users 399k aug 4 10:41 readme.txt -rw-r--r-- 1 0018121 domain users 136k aug 4 10:20 image.jpg そのため、親フォルダーから、子フォルダーが現在有効なgitリポジトリであるかどうか(および現在チェックアウトされているブランチ)を確認できます。ありがとう
回答: 複雑にしないでおく;ディレクトリ.gitを探し、含まれているディレクトリ内からコマンドを実行します。また、-printをスローして、実行されているディレクトリを確認します。find . -type d -name .git -print -execdir git symbolic-ref --short head \; (実際、-printは、found—./path/to/repo/.gitであり、./path/to/repo/自体ではありません。しかし、それはちょっとした不便。)編集:次の方法でopで要求された正確な出力を生成できます:paste <(ls -ld *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short head))"; else echo; fi; done) これには、私が見ることができる実際の欠点はありません。設計上、最上位のgitリポジトリのみが検出されます。つまり、「data」ディレクトリ(この例ではls出力)にgitリポジトリであるサブディレクトリがある場合、それらはリストされませんが、find私が以前に与えたコマンドはそうなるでしょう。しかし、私が言うように、それは仕様によるものです。これは、lsの出力の色を保持しません。これを行うには、埋め込まれたlsコマンドに--color=alwaysを追加します。paste <(ls -ld --color=always *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short head))"; else echo; fi; done) ただし、何らかの理由で、これによりすべての出力の最後に余分な改行が生成されます。しかたがない;大したimoではありません。mac osの場合、lsには--colorフラグがないため、以下を使用してカラー出力を強制します。paste <(clicolor_force=true ls -ld *) <(for i in *; do if [ -d "$i"/.git ] ; then echo "($(git --git-dir="$i"/.git symbolic-ref --short head))"; else echo; fi; done)