Nein, "Git-Status". gibt Geschwisterordner als zB "../sibling"
EoghanM
Würde es Ihnen etwas ausmachen, etwas mehr Kontext darüber anzugeben, warum Sie Änderungen an anderer Stelle in Ihrem Baum herausfiltern möchten? In welchen Situationen möchten Sie diese Funktion verwenden?
Greg Bacon
1
Wenn der normale Befehl "git status" mehr als einen Bildschirmwert ausgibt
zeigt den Status des aktuellen Verzeichnisses und der Unterverzeichnisse an.
Zum Beispiel gegebene Dateien (Zahlen) in diesem Baum:
a/1
a/2
b/3
b/4
b/c/5
b/c/6
git statuszeigt im Unterverzeichnis "b" neue Dateien im gesamten Baum an:
% 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 .zeigt aber nur Dateien in "b" und darunter.
% 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
#
Nur dieses Unterverzeichnis, nicht unten
git status .zeigt alle Dateien unter "b" rekursiv an. Um nur die Dateien im "b", aber nicht unten anzuzeigen, müssen Sie eine Liste nur der Dateien (und nicht der Verzeichnisse) an übergeben git status. Dies ist ein bisschen fummelig, abhängig von Ihrer Shell.
Zsh
In zsh können Sie normale Dateien mit dem "glob qualifier" auswählen (.). Zum Beispiel:
% 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
Bash hat keine Glob-Qualifikationsmerkmale, aber Sie können GNU verwenden find, um normale Dateien auszuwählen und sie dann git statuswie folgt weiterzugeben :
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
Dies verwendet -maxdeptheine GNU-Find- Erweiterung. POSIX find hat nicht -maxdepth, aber Sie können dies tun:
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
Es hat so lange gedauert, bis wir auf diese Antwort zurückgekommen sind - einfach und richtig! Ich frage mich, ob <Pfadspezifikation> nach meiner Frage zum Git-Status hinzugefügt wurde.
EoghanM
Was ist, wenn Sie nur an dem aktuellen Ordner interessiert sind, auf den verwiesen wird ., nicht jedoch auf dessen Unterordner? Irgendeine Arbeit dafür? Vielen Dank!
Benjamin
@benjaminz hängt von Ihrer Verwendung ab - für solche Dinge verwende ich Shell-Globbing, um Dateien auszuwählen, aber keine Unterverzeichnisse, z. B. (für zsh) git status *(.). Bash hat keine Kurzform, um nur Dateien zu globalisieren, aber Sie könnten eine erweiterte findz find . -type f -maxdepth 1 -exec git status {} +. Scheint so, als würden Sie einen Alias oder ein Skript einfügen, anstatt die ganze Zeit zu tippen.
Matt Curtis
3
Einige Installationsbefehle verwenden ein Verzeichnis als Parameter:
git ls-files -t -o -m aDirectory
würde Ihnen alle Dateien geben, die geändert, aber nicht aktualisiert (nicht zur Bühne hinzugefügt) oder nicht verfolgt wurden. Und das für ein Verzeichnis.
Ein grundlegenderer Grund ist, dass es bei der ls-filesInstallation um den Index geht .
Beim Hinzufügen geht es nicht um einen Vergleich zwischen dem Index und dem Arbeitsbaum.
Es befindet sich zwischen dem HEAD-Commit und dem Index und gehört nicht zu ls-files plumbing.
Ich finde es toll, dass grep immer eine provisorische Lösung anbietet, wenn Sie keine spezifischere kennen. Prost auf die Taco-Bell-Programmierung.
Murftown
Das ist viel mächtiger!
Benjamin
2
Es ist möglich, sich git statusauf das aktuelle Verzeichnis (ohne untergeordnete Ordner) zu beschränken , indem Sie eine Pfadangabe mit dem Zauberwort globund *::
Das funktioniert super! Genau das, wonach ich gesucht habe!
Poindexter
1
Als ich es mit Git versuchte, fand ich keinen Weg, das zu tun.
Am Ende tat ich:
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
Dies ist die Methode, die ich verwendet habe ... im Folgenden werden auch die Statusüberschriften angezeigt: git status | grep "main \ |: \ $" ... leider verlieren Sie die Farbe.
EoghanM
Kam über diese Frage auf der Suche nach einem generischen Glob-Match. Dies ist bei weitem am einfachsten und funktioniert für mich, z. B. git status | grep extwo ext die Erweiterung ist. Vielen Dank!
Antworten:
zeigt den Status des aktuellen Verzeichnisses und der Unterverzeichnisse an.
Zum Beispiel gegebene Dateien (Zahlen) in diesem Baum:
git status
zeigt im Unterverzeichnis "b" neue Dateien im gesamten Baum an:git status .
zeigt aber nur Dateien in "b" und darunter.Nur dieses Unterverzeichnis, nicht unten
git status .
zeigt alle Dateien unter "b" rekursiv an. Um nur die Dateien im "b", aber nicht unten anzuzeigen, müssen Sie eine Liste nur der Dateien (und nicht der Verzeichnisse) an übergebengit status
. Dies ist ein bisschen fummelig, abhängig von Ihrer Shell.Zsh
In zsh können Sie normale Dateien mit dem "glob qualifier" auswählen
(.)
. Zum Beispiel:Bash
Bash hat keine Glob-Qualifikationsmerkmale, aber Sie können GNU verwenden
find
, um normale Dateien auszuwählen und sie danngit status
wie folgt weiterzugeben :Dies verwendet
-maxdepth
eine GNU-Find- Erweiterung. POSIX find hat nicht-maxdepth
, aber Sie können dies tun:quelle
.
, nicht jedoch auf dessen Unterordner? Irgendeine Arbeit dafür? Vielen Dank!git status *(.)
. Bash hat keine Kurzform, um nur Dateien zu globalisieren, aber Sie könnten eine erweitertefind
zfind . -type f -maxdepth 1 -exec git status {} +
. Scheint so, als würden Sie einen Alias oder ein Skript einfügen, anstatt die ganze Zeit zu tippen.Einige Installationsbefehle verwenden ein Verzeichnis als Parameter:
würde Ihnen alle Dateien geben, die geändert, aber nicht aktualisiert (nicht zur Bühne hinzugefügt) oder nicht verfolgt wurden. Und das für ein Verzeichnis.
Wie in diesem Thread geschrieben , unterstützt git ls-files keine
--added
Option.Verwenden Sie also die hier genannten Befehle :
würde Ihnen sowohl nicht hinzugefügte als auch hinzugefügte Dateien geben
würde Ihnen nur nicht hinzugefügte Dateien geben. (beim Erkennen von Umschreibungen, Umbenennungen, Kopien, ...)
Wie bei Installationsbefehlen üblich, sind einige Skripte angebracht;)
quelle
Unvollkommen, aber dies funktioniert auch in dem Verzeichnis, an dem Sie interessiert sind:
Dadurch werden alle Verzeichnisse ausgeblendet, für deren relativen Pfad eine Aufwärtsreferenz erforderlich wäre.
Wenn Sie Farbe spuckt das andere Ende erhalten möchten, setzen Sie
color.status
aufalways
:quelle
Es ist möglich, sich
git status
auf das aktuelle Verzeichnis (ohne untergeordnete Ordner) zu beschränken , indem Sie eine Pfadangabe mit dem Zauberwortglob
und*:
:git status ':(glob)*'
quelle
Als ich es mit Git versuchte, fand ich keinen Weg, das zu tun.
Am Ende tat ich:
quelle
git status | grep ext
wo ext die Erweiterung ist. Vielen Dank!cd YOUR_REQUIRED_DIRECTORY, dann
Git-Status.
quelle