リポジトリのサブフォルダーでgitstatusを実行すると、親フォルダーのステータスも含まれます。
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」内のファイルのみを表示し、下には表示しないようにするには、ファイルのみのリスト(ディレクトリではない)をに渡す必要がありますgit status
。シェルにもよりますが、これは少し面倒です。
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にはglob修飾子がありませんが、GNUfind
を使用して通常のファイルを選択し、それらを次の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
は、GNUfind拡張機能を使用します。POSIX findにはがありませんが-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
.
参照せず、参照する現在のフォルダのみに関心がある場合はどうなりますか。そのための回避策はありますか?ありがとう!
git status *(.)
。Bashには、ファイルのみをグロブする簡単な方法はありませんが、拡張されたfind
例を使用できますfind . -type f -maxdepth 1 -exec git status {} +
。いつもタイプするのではなく、エイリアスやスクリプトに入れたいようなもののようです。
一部の配管コマンドは、パラメータとしてディレクトリを取ります。
git ls-files -t -o -m aDirectory
変更されたが更新されていない(ステージに追加されていない)、または追跡されていないすべてのファイルが表示されます。そしてそれはディレクトリです。
このスレッドで書かれているように、gitls-filesは '--added
オプションをサポートしていません。
より根本的な理由は、
ls-files
配管がインデックスに関するものだからです。
追加されたのは、インデックスと作業ツリーの比較ではありません。
これはHEADコミットとインデックスの間にあり、ls-files配管に属していません。
したがって、ここに記載されているコマンドを使用します。
git diff-index --name-only -B -R -M -C HEAD src
追加されていないファイルと追加されたファイルの両方が表示されます
git diff-files --name-only -B -R -M -C src
追加されていないファイルのみが表示されます。(書き換え、名前変更、コピーなどを検出している間...)
配管コマンドでいつものように、いくつかのスクリプトが順番にあります;)
不完全ですが、これは関心のあるディレクトリ内からも機能します。
git status | grep -v ' \.\./'
これにより、相対パスで上向きの参照が必要になるすべてのディレクトリが非表示になります。
もう一方の端に色を吐き出したい場合は、次のように設定color.status
しalways
ます。
git config color.status always
git status
魔法の言葉glob
と*:
:を使用してpathspecを指定することにより、現在のディレクトリ(子フォルダなし)に制限することができます。
git status ':(glob)*'
gitを試したとき、それを行う方法が見つかりませんでした。
私はやった:
x@x:~/x$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
# main/a
nothing added to commit but untracked files present (use "git add" to track)
x@x:~/x$ git status | grep main
# main/a