Gibt es eine Möglichkeit, einen Befehl wie git ls-files
um nur nicht verfolgte Dateien anzuzeigen?
Der Grund, den ich frage, ist, weil ich den folgenden Befehl verwende, um alle gelöschten Dateien zu verarbeiten:
git ls-files -d | xargs git rm
Ich hätte gerne etwas Ähnliches für nicht verfolgte Dateien:
git some-command --some-options | xargs git add
Ich konnte das -o
Option zu git ls-files
, aber das ist nicht das, was ich will, weil es auch ignorierte Dateien anzeigt. Ich konnte mir auch den folgenden langen und hässlichen Befehl einfallen lassen:
git status --porcelain | grep '^??' | cut -c4- | xargs git add
Es scheint, dass es einen besseren Befehl geben muss, den ich hier verwenden kann. Und wenn nicht, wie erstelle ich benutzerdefinierte Git-Befehle?
Um nicht verfolgte Dateien aufzulisten, versuchen Sie:
git ls-files --others --exclude-standard
Wenn Sie die Ausgabe an xargs
leiten müssen, sollten Sie Leerzeichen mit git ls-files -z
und xargs -0
:
git ls-files -z -o --exclude-standard | xargs -0 git add
Netter Alias für das Hinzufügen von nicht verfolgten Dateien:
au = !git add $(git ls-files -o --exclude-standard)
Bearbeiten: Als Referenz: git-ls-files
Wenn Sie nur nicht verfolgte Dateien entfernen möchten, gehen Sie folgendermaßen vor:
git clean -df
fügen Sie x
hinzu, wenn Sie auch speziell ignorierte Dateien einschließen möchten. Ich benutze git clean -dfx
Ein Los den ganzen Tag.
Sie können einen benutzerdefinierten Git erstellen, indem Sie einfach ein Skript mit dem Namen git-whatever
Schreiben und es in Ihrem Pfad haben.
git add -A -n
wird machen was du willst. -A
fügt alle nicht verfolgten Dateien zum Repo hinzu, -n
macht es zu einem dry-run
, wobei das Hinzufügen nicht ausgeführt wird, aber die Statusausgabe mit einer Liste aller Dateien versehen ist, die wäre hinzugefügt worden sind.
Die akzeptierte Antwort stürzt bei Dateinamen mit Leerzeichen ab. Ich bin derzeit nicht sicher, wie ich den Alias-Befehl aktualisieren soll. Daher werde ich die verbesserte Version hier einfügen:
git ls-files -z -o --exclude-standard | xargs -0 git add
Alles ist sehr einfach
Um eine Liste aller nicht verfolgten Dateien zu erhalten verwenden Sie den Befehl git status mit Option -u (--untracked-files)
git status -u
Wenn Sie nach Dateien suchen, die möglicherweise hinzugefügt werden sollen. Die Ausgabe von git show
Erledigt das, enthält aber auch viele andere Dinge. Der folgende Befehl ist nützlich, um die gleiche Liste von Dateien abzurufen, jedoch ohne alle anderen Elemente.
git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'
Dies ist nützlich, wenn Sie in einer Pipeline nach Dateien suchen, die einem bestimmten Muster entsprechen, und diese dann an git add
Weiterleiten.
git status --porcelain | grep "^?? " | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add
Ich weiß, es ist eine alte Frage, aber in Bezug auf die Auflistung nicht verfolgter Dateien dachte ich, ich würde eine weitere hinzufügen, die auch nicht verfolgte Ordner auflistet:
Sie können die Git-Bereinigungsoperation mit -n (Probelauf) verwenden, um anzuzeigen, welche Dateien (einschließlich der .gitignore-Dateien) entfernt werden:
git clean -xdn
Dies hat den Vorteil, dass alle Dateien und alle Ordner angezeigt werden, die nicht verfolgt werden. Parameter:
x
- Zeigt alle nicht verfolgten Dateien an (auch von Git und anderen ignoriert, wie Build-Ausgabe usw.)d
- zeigt nicht verfolgte Verzeichnisse ann
- und am meisten wichtig! - dryrun, d. h. nichts löschen, nur den Bereinigungsmechanismus verwenden, um die Ergebnisse anzuzeigen.Alle vorherigen Antworten, die ich überprüft habe, würden auch die zu übermittelnden Dateien auflisten. Hier ist eine einfache Lösung, die nur Dateien auflistet, die sich noch nicht im Repo befinden und nicht .gitignore
Unterliegen.
git status --porcelain | awk '/^\?\?/ { print $2; }'
Ich denke das wird so das selbe sein wie das Originalplakat:
git add .