Nur nicht verfolgte Dateien hinzufügen

167

Einer der Befehle, die ich in Git unglaublich nützlich finde, ist git add -u, alles außer nicht verfolgten Dateien in den Index zu werfen. Gibt es eine Umkehrung davon? In den letzten Monaten befand ich mich häufig in einer Position, in der ich dem Index interaktiv einige Aktualisierungen hinzugefügt habe und alle nicht verfolgten Dateien zu diesem Index hinzufügen möchte, bevor ich ein Commit durchführe.

Gibt es eine Möglichkeit, nur die nicht verfolgten Dateien zum Index hinzuzufügen, ohne sie einzeln zu identifizieren? Ich sehe in den Hilfedokumenten nichts Offensichtliches, aber vielleicht fehlt es mir?

Vielen Dank.

Rob Wilkerson
quelle
1
In Bezug auf "alles außer nicht verfolgten Dateien in den Index werfen" wurde .gitignorespeziell für diesen Zweck entwickelt, nicht git add -u.
Pacerier
Bitten Sie auch darum, die nicht verfolgten Dateien hinzuzufügen, während Sie alle aktuell verfolgten Dateien entfernen, oder möchten Sie die nicht verfolgten Dateien zusätzlich zu den aktuell verfolgten Dateien hinzufügen (damit alles verfolgt wird)?
Pacerier

Antworten:

234

Es ist einfach mit git add -i. Geben Sie a(für "untracked hinzufügen"), dann *(für "all") und dann q(zum Beenden) ein und Sie sind fertig.

So machen Sie es mit einem einzigen Befehl: echo -e "a\n*\nq\n"|git add -i

Matte
quelle
4
Ich hatte gehofft, dass es etwas weniger gibt, na ja, interaktiv, aber es ist sicherlich besser als Datei für Datei. :-)
Rob Wilkerson
34
echo -e "a\n*\nq\n"|git add -i
Mat
@Mat danke, so ist der vollständige Befehl ----> git add -ia * q ??
BKSpurgeon
Argument list too long... so nah!
Simeon
1
Für mich mit git 2.21.0 war es git add -idann untracked 4hinzuzufügen, dann *für alle dann qaufzuhören
Harry B
36

git ls-files -o --exclude-standard Gibt nicht verfolgte Dateien an, sodass Sie wie folgt vorgehen können (oder einen Alias ​​hinzufügen können):

git add $(git ls-files -o --exclude-standard)
Manojlds
quelle
1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" funktioniert für mich
Stephan
git ls-files --help ist eine nützliche Lektüre:-o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann
15

Nicht genau das, wonach Sie suchen, aber ich fand das sehr hilfreich:

git add -AN

Fügt alle Dateien zum Index hinzu, jedoch ohne deren Inhalt. Dateien, die nicht verfolgt wurden, verhalten sich jetzt so, als ob sie verfolgt würden. Ihr Inhalt wird in angezeigt git diffund Sie können ihn dann interaktiv mit hinzufügen git add -p.

hasen
quelle
Dies ist genau das, wonach ich gesucht habe - ermöglicht es auch git commit -p, durch neue Dateien zu gehen.
Nitsujri
11

Sie können dies zu Ihrer ~ / .gitconfig-Datei hinzufügen:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Führen Sie dann über die Befehlszeile einfach Folgendes aus:

git add-untracked
Joshuadavey
quelle
Ich mag diesen Ansatz, aber er behandelt keine Leerzeichen in Dateinamen.
Paul Coccoli
9

Die Leute haben vorgeschlagen, die Ausgabe von git ls-filesan git addzu leiten , aber dies wird in Fällen fehlschlagen, in denen Dateinamen Leerzeichen oder Glob-Zeichen enthalten, wie z *.

Der sichere Weg wäre zu verwenden:

git ls-files -o --exclude-standard -z | xargs -0 git add

Dabei -zweist git an, Zeilenterminatoren zu verwenden \0, und -0xargs wird das Gleiche mitgeteilt. Der einzige Nachteil dieses Ansatzes besteht darin, dass die -0Option nicht dem Standard entspricht und daher nur von einigen Versionen xargsunterstützt wird.

Tom Fenech
quelle
6

git ls-fileslistet die Dateien im aktuellen Verzeichnis auf. Wenn Sie nicht verfolgte Dateien von einer beliebigen Stelle im Baum auflisten möchten, funktioniert dies möglicherweise besser:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

So fügen Sie alle nicht verfolgten Dateien zum Baum hinzu:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
pborenstein
quelle
6

Ich habe es versucht und es hat funktioniert:

git stash && git add . && git stash pop

git stashlegt nur alle geänderten verfolgten Dateien in einem separaten Stapel ab, dann bleiben übrig gebliebene Dateien nicht verfolgte Dateien. Wenn Sie dies tun, git add .werden alle nicht nachverfolgten Dateien nach Bedarf bereitgestellt. Schließlich, um alle geänderten Dateien vom Stapel zurück zu bekommen, indem Sie dies tungit stash pop

Rohan Khude
quelle
0

Wenn Sie Tausende von nicht verfolgten Dateien haben (ugh, fragen Sie nicht) git add -i, funktioniert dies beim Hinzufügen nicht *. Sie erhalten eine Fehlermeldung Argument list too long.

Wenn Sie dann auch unter Windows arbeiten (fragen Sie nicht nach Nummer 2 :-) und PowerShell zum Hinzufügen aller nicht verfolgten Dateien verwenden müssen, können Sie diesen Befehl verwenden:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
Simeon
quelle
Eine komprimiertere Version:git ls-files -o --exclude-standard | % { git add $_ }
Marckassay
0

Viele gute Tipps hier, aber in Powershell konnte ich es nicht zum Laufen bringen.

Ich bin ein .NET-Entwickler und wir verwenden hauptsächlich noch Windows-Betriebssysteme, da wir .Net Core und plattformübergreifende Anwendungen nicht so häufig verwendet haben. Daher verwende ich Git täglich in einer Windows-Umgebung, in der die verwendete Shell häufiger Powershell ist und nicht Git Bash.

Mit dem folgenden Verfahren können Sie eine Alias-Funktion zum Hinzufügen von nicht verfolgten Dateien in einem Git-Repository erstellen.

In Ihrer $ -Profildatei von Powershell (falls es fehlt - Sie können Folgendes ausführen: New-Item $ Profile)

Notizblock $ Profil

Fügen Sie nun diese Powershell-Methode hinzu:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Speichern Sie die $ profile-Datei und laden Sie sie erneut in Powershell. Laden Sie dann Ihre $ profile-Datei neu mit :. $ profile

Dies ähnelt dem Quellbefehl in * nix-Umgebungen IMHO.

Wenn Sie das nächste Mal Entwickler sind, die Powershell in Windows gegen Git Repo verwenden und nur nicht verfolgte Dateien einschließen möchten, können Sie Folgendes ausführen:

AddUntracked-Git

Dies folgt der Powershell-Konvention, bei der Sie Verb-Nomen haben.

Tore Aurstad
quelle
0

git hinzufügen. (Alle Dateien in diesem Verzeichnis hinzufügen)

git add -all (füge alle Dateien in allen Verzeichnissen hinzu)

git add -N kann hilfreich sein, um die für später aufzulisten ....

atreyHazelHispanic
quelle
git add -uwird geänderte Dateien hinzufügen, die nicht nicht verfolgt werden
Tarasovych
-3

Um alle nicht verfolgten Dateien hinzuzufügen, lautet der Befehl git

git add -A

Wenn Sie weitere Informationen zu verschiedenen verfügbaren Optionen erhalten möchten, können Sie den Befehl eingeben

git add -i

Anstelle des ersten Befehls erhalten Sie hiermit weitere Optionen, einschließlich der Option zum Hinzufügen aller nicht verfolgten Dateien, wie unten gezeigt:

$ git add -i Warnung: LF wird in README.txt durch CRLF ersetzt. Die Datei hat ihre ursprünglichen Zeilenenden in Ihrem Arbeitsverzeichnis. Warnung: LF wird in package.json durch CRLF ersetzt.

* Befehle * 1: Status 2: Update 3: Zurücksetzen 4: Untracked hinzufügen 5: Patch 6: Diff 7: Beenden 8: Hilfe Was jetzt> a

L. Sidhu
quelle