2013-04-02 15 views
11

Gibt es eine Möglichkeit, nur neue Dateien hinzuzufügen und keine modifizierten Dateien mit git hinzufügen? Das heißt, Dateien, die nicht mit git-Status aufgelistet sind.Git nur alle neuen Dateien hinzufügen, nicht modifizierte Dateien

Anders als natürlich jede Datei separat hinzufügen.

Es ist nicht unbedingt notwendig, dies in meinem Fall zu tun, ist die eigentliche Frage für mich hier beantwortet: How to make git-diff and git log ignore new and deleted files?

Das heißt, zeigt nicht diff auf neue Dateien, so bitte ich dies mehr, weil ich Ich konnte nirgendwo eine Antwort finden.

+0

Was ist der Anwendungsfall für das? Weil ich nicht sehe, wie es sinnvoll ist, Dateien hinzuzufügen und keine relevanten Änderungen in bestehenden Dateien hinzuzufügen, und wenn die Änderungen nicht relevant sind, müssen die zu übertragenden Änderungen wahrscheinlich nach einigen anderen Kriterien manuell ausgewählt werden. –

+0

Mein Workflow ist, dass ich jede Datei mit diff überprüfe und dann füge ich es hinzu, um es aus dem Weg zu bekommen. Das git diff zeigt nun nur noch die Dateien an, die ich überprüfen muss. Also möchte ich neue Dateien hinzufügen (vorausgesetzt, dass sie "ok" sind), um sie aus dem Weg zu räumen. –

Antwort

12

git add $(git ls-files -o --exclude-standard) 

git ls-files können Sie die Dateien von git, gefiltert durch einige Optionen verwaltet Liste Vielleicht. -o in diesem Fall filtert es nur um zu zeigen, „andere (das heißt untracked-Dateien)“

Die $(...) Anweisung übergibt den Rückgabewert des Befehls als Argument an git add.

+0

Sie müssen die ignorierten Dateien erneut ausschließen, sonst wird 'git add' beschweren. Z.B. indem Sie das Flag '--exclude-standard' für den Aufruf' git ls-files -o' verwenden. –

+0

OK, wusste das nicht. Vielen Dank! –

+0

Wenn ich mich richtig erinnere, klagt es * nur * und sagt dir, dass es diese Dateien ignorieren wird und dass, wenn du sie wirklich hinzufügen willst, du das '--force' Flag verwenden musst. Immer noch, nervig. –

2

Sie kurzen Modus von git status verwenden kann (siehe man git-status(1)), die die folgende Ausgabe gibt:

Ohne Kurzmodus:

$ git status 

... 


# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# README 
# application/libraries/Membres_exception.php 
no changes added to commit (use "git add" and/or "git commit -a") 

Mit kurzem Modus:

$ git status -s 
M application/models/membre_model.php 
?? README 
?? application/libraries/Membres_exception.php 

Dann Mit grep, awk und xarg können Sie die Dateien hinzufügen, in denen die erste Spalte ?? ist.

$ git status -s | grep '??' | awk '{ print $2 }' | xargs git add 

und sehen, dass es funktioniert:

$ git status 
# On branch new 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: README 
# new file: application/libraries/Membres_exception.php 
+0

gute Idee, obwohl es ein Problem gibt: in dem Fall Dateipfad enthält Leerzeichen 'awk' {print $ 2} '' wird nur den ersten Teil eines solchen Dateipfades greifen. –

+0

Wie wäre es mit diesem: 'git status -s | Grep '??' | awk '{print substr ($ 0, Index ($ 0, $ 2))}' | xargs git add' –

Verwandte Themen