web-dev-qa-db-ger.com

Hinzufügen nur nicht abgehackter Dateien

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.

129
Rob Wilkerson

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

192
Mat

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)
28
manojlds

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.

10
hasen

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
9
joshuadavey

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.

8
Tom Fenech

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
3
pborenstein

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

2
Rohan Khude

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 ....

0

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 $_ }
0
Simeon

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.

0
Tore Aurstad