Wenn ich den Git-Status in einem Unterordner meines Repositorys mache, enthält er auch den Status der übergeordneten Ordner.
Gibt es eine Möglichkeit, den Git-Status auf einen bestimmten Ordner zu beschränken?
Wenn ich den Git-Status in einem Unterordner meines Repositorys mache, enthält er auch den Status der übergeordneten Ordner.
Gibt es eine Möglichkeit, den Git-Status auf einen bestimmten Ordner zu beschränken?
Antworten:
git status .
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
#
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.
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 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
., 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 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.
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.
Wie in diesem Thread geschrieben , unterstützt git ls-files keine --addedOption.
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.
Verwenden Sie also die hier genannten Befehle :
git diff-index --name-only -B -R -M -C HEAD src
würde Ihnen sowohl nicht hinzugefügte als auch hinzugefügte Dateien geben
git diff-files --name-only -B -R -M -C src
würde Ihnen nur nicht hinzugefügte Dateien geben. (beim Erkennen von Umschreibungen, Umbenennungen, Kopien, ...)
Wie bei Installationsbefehlen üblich, sind einige Skripte angebracht;)
Unvollkommen, aber dies funktioniert auch in dem Verzeichnis, an dem Sie interessiert sind:
git status | grep -v ' \.\./'
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.statusauf always:
git config color.status always
Es ist möglich, sich git statusauf das aktuelle Verzeichnis (ohne untergeordnete Ordner) zu beschränken , indem Sie eine Pfadangabe mit dem Zauberwort globund *::
git status ':(glob)*'
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