1. ホーム
  2. git

[解決済み] 単一のサブフォルダのgit-statusを取得するには?

2023-04-03 14:35:44

質問

リポジトリのサブフォルダでgit statusを実行すると、親フォルダの状態も表示されます。

git-status を特定のフォルダだけに限定する方法はありますか?

どのように解決するのですか?

git status .

は、カレントディレクトリとサブディレクトリの状態を表示します。

例えば、このツリー内の与えられたファイル(番号)は

a/1
a/2
b/3
b/4
b/c/5
b/c/6

サブディレクトリ "b"から。 git status は、ツリー全体の新しいファイルを表示します。

% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   ../a/1
#   new file:   ../a/2
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

しかし git status . は "b"以下のファイルを表示するだけです。

% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

このサブディレクトリだけ、以下ではない

git status . は、"b" より下にあるすべてのファイルを再帰的に表示します。b" より下のファイルではなく、"b" にあるファイルだけを表示するには、ファイルだけのリスト (ディレクトリではない) を git status . これは、お使いのシェルによっては、少し面倒です。

Zsh

zshでは、"glob修飾子"で普通のファイルを選択することができます。 (.) . 例えば

% git status *(.)
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

バッシュ

Bashにはグロブ修飾子がありませんが、GNU find を使って普通のファイルを選択し、それを git status のようにします。

bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

これは -maxdepth であり、これは GNU検索 の拡張機能です。 POSIX検索 には -maxdepth を持たないが、これを行うことができる。

bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4