Einer der Befehle, die ich in Git unglaublich nützlich finde, ist git add -u
, um alles, außer nicht aufgespürte Dateien, in den Index zu werfen. Gibt es eine Umkehrung davon? In den letzten Monaten befand ich mich oft in einer Position, in der ich interaktiv einige Aktualisierungen zum Index hinzugefügt habe. Ich möchte vor dem Festschreiben alle nicht protokollierten Dateien zu diesem Index hinzufügen.
Gibt es eine Möglichkeit, only die nicht protokollierten Dateien zum Index hinzuzufügen, ohne sie einzeln zu identifizieren? Ich sehe nichts offensichtliches in den Hilfedokumenten, aber vielleicht fehlt mir das?
Vielen Dank.
Mit git add -i
ist es einfach. Geben Sie a
(für "untracked hinzufügen") ein, dann *
(für "alle"), dann q
(zum Beenden) und fertig.
Um dies mit einem einzigen Befehl zu tun: echo -e "a\n*\nq\n"|git add -i
git ls-files -o --exclude-standard
gibt untracked Dateien, so dass Sie etwas wie unten machen können (oder einen Alias hinzufügen):
git add $(git ls-files -o --exclude-standard)
Nicht genau das, wonach Sie suchen, aber ich fand das sehr hilfreich:
git add -AN
Fügt dem Index alle Dateien hinzu, jedoch ohne deren Inhalt. Dateien, die nicht abgerufen wurden, verhalten sich jetzt so, als würden sie verfolgt. Ihr Inhalt wird in git diff
angezeigt, und Sie können dann interaktiv mit git add -p
hinzufügen.
Sie können dies Ihrer ~/.gitconfig-Datei hinzufügen:
[alias]
add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"
Führen Sie dann von der Befehlszeile aus Folgendes aus:
git add-untracked
Die Leute haben vorgeschlagen, die Ausgabe von git ls-files
an git add
weiterzuleiten. Dies schlägt jedoch fehl, wenn Dateinamen Leerzeichen oder Glob-Zeichen enthalten, wie *
.
Der sichere Weg wäre zu verwenden:
git ls-files -o --exclude-standard -z | xargs -0 git add
dabei gibt -z
git an, \0
-Zeilenabschlüsse zu verwenden, und -0
teilt xargs dasselbe mit. Der einzige Nachteil dieses Ansatzes ist, dass die -0
-Option nicht standardmässig ist. Daher unterstützen nur einige Versionen von xargs
diese Option.
git ls-files
listet die Dateien im aktuellen Verzeichnis auf. Wenn Sie nicht protokollierte Dateien von einer beliebigen Stelle in der Baumstruktur aus auflisten möchten, könnte dies besser funktionieren
git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)
So fügen Sie alle nicht protokollierten Dateien in der Baumstruktur hinzu:
git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
Ich habe es versucht und es hat funktioniert:
git stash && git add . && git stash pop
git stash
setzt nur alle geänderten, nachverfolgten Dateien in einen separaten Stapel. Die restlichen Dateien sind nicht aufgespürte Dateien. Wenn Sie dann git add .
ausführen, werden alle Dateien, falls erforderlich, nicht protokolliert. Um alle modifizierten Dateien vom Stapel zu bekommen, git stash pop
git hinzufügen. (füge alle Dateien in diesem Verzeichnis hinzu)
git add -all (füge alle Dateien in allen Verzeichnissen hinzu)
git add -N kann hilfreich sein, um diejenigen für später aufzulisten ....
Wenn Sie Tausende von nicht protokollierten Dateien haben (ugh, nicht fragen), funktioniert git add -i
nicht, wenn Sie *
hinzufügen. Sie erhalten eine Fehlermeldung, die Argument list too long
angibt.
Wenn Sie sich auch unter Windows befinden (nicht nach # 2 fragen :-) und PowerShell zum Hinzufügen aller nicht aufgezeichneten Dateien verwenden müssen, können Sie diesen Befehl verwenden:
git ls-files -o --exclude-standard | select | foreach { git add $_ }
Viele gute Tipps hier, aber in Powershell konnte ich es nicht zum Laufen bringen.
Ich bin ein .NET-Entwickler und wir verwenden hauptsächlich immer noch Windows, da wir nicht so viel von .NET Core und Cross-Plattform Gebrauch gemacht haben. Mein täglicher Einsatz mit Git ist 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 deiner $ profile-Datei von Powershell (falls es fehlt - du kannst 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 Befehl source in IMHO * nix-Umgebungen.
Wenn Sie also das nächste Mal Powershell in Windows gegen Git Repo als Entwickler verwenden und nur nicht protokollierte Dateien einschließen möchten, können Sie Folgendes ausführen:
AddUntracked-Git
Dies folgt der Powershell-Konvention, in der Sie Verb-Nomen haben.