Git Bash - lsはgit repoフォルダを表示します。

Git Bash - lsはgit repoフォルダを表示します。

3つのフォルダを含む/ c / Toolsフォルダがあります。

以下のコマンドが欲しい

$ 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リポジトリ(および現在チェックアウトされている分岐)であることがわかります。

ありがとう

ベストアンサー1

簡単にしてください。そのディレクトリを見つけて、含まれている.gitディレクトリからコマンドを実行します。また、aと入力して-print実行中のディレクトリを確認することもできます。

find . -type d -name .git -print -execdir git symbolic-ref --short HEAD \;

(まあ、実際に-printディレクトリを表示します。確立された- ./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--color=alwaysembedコマンドにを追加するだけですls

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)

ただし、何らかの理由で、すべての出力の末尾に追加の改行文字が生成されます。わかりました、そうではありません。


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)

おすすめ記事