Was bedeuten die doppelten Striche vor dem Dateinamen in diesem git-Befehl?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Sind sie obligatorisch? Ist es gleichbedeutend mit
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
git
git-checkout
mottalrd
quelle
quelle
Antworten:
Angenommen, ich habe eine Datei mit dem Namen
path/to/file.txt
in meinem Git-Repository und möchte Änderungen daran rückgängig machen.Angenommen, die Datei heißt
master
...Hoppla! Das hat stattdessen die Zweige gewechselt. Das
--
trennt den Baum, den Sie auschecken möchten, von den Dateien, die Sie auschecken möchten.Es hilft uns auch, wenn ein Freako eine Datei mit dem Namen "
-f
Repository" hinzugefügt hat :Dies ist in git-checkout: Argument Disambiguation dokumentiert .
quelle
--
mit dem Optionen von anderen Argumenten getrennt werden können. Sie sehen es also in Befehlen wiecp
undmv
(die nicht Teil von Bash sind).checkout
Befehlsdokumentation nicht richtig beschrieben wird ?checkout
Befehl aufgelistet , aber nirgends erklärt die Dokumentation, was es tut oder warum es verwendet wird ... was mich letztendlich hierher gebracht hat.--
. Als jemand, der nicht aus einem Linux-Hintergrund stammt, ist es nicht offensichtlich, was das bewirkt. Für mich schien es eine git-spezifische Syntax zu sein, ohne Beschreibung ihres funktionalen Zwecks. Ich denke, es wäre besser, eine kurze Beschreibung wie die anderen Optionen oder zumindest einen Link zu einer Linux-Manpage zu haben .Der doppelte Bindestrich "-" bedeutet "Ende der Befehlszeilenflags", dh er weist den vorhergehenden Befehl an, nicht zu versuchen, zu analysieren, was nach den Befehlszeilenoptionen kommt.
quelle
git
bedeutet dies mehr als dies, da es auch bedeutet, dass das Argument nach dem--
kein Verzweigungsname sein kann und das vorhergehende Argument implizit--
kein Dateipfad sein kann.Beachten Sie, dass Sie seit Git 2.5 (Q2 2015) kein '
--
' benötigen würden , wenn Ihr Argument Platzhalter (*
) enthält.Eine Heuristik, die der
git <cmd> <revs> <pathspec>
Befehlszeilenkonvention hilft, falsch eingegebene Pfade abzufangen, besteht darin, sicherzustellen, dass alle Nicht-Rev-Parameter im späteren Teil der Befehlszeile Namen der Dateien im Arbeitsbaum sind. Dies bedeutet jedoch, dass diesgit grep $str -- \*.c
immer der Fall sein muss eindeutig mit "--
", weil niemand vernünftig eine Datei erstellen wird, deren Name buchstäblich Sternchen-Punkt-Sehen ist.Git 2.5 verliert die Heuristik, um zu deklarieren, dass der Benutzer mit einer Platzhalterzeichenfolge wahrscheinlich beabsichtigt hat, uns eine Pfadspezifikation zu geben .
Siehe Commit 28fcc0b (02. Mai 2015) von Duy Nguyen (
nguyenlocduy
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 949d167 , 19. Mai 2015)Mit Git 2.26 (Q1 2020) wurde die Disambiguierungslogik zur Unterscheidung von Revisionen und Pfadspezifikationen so angepasst, dass Backslash-Escap-Glob-Sonderzeichen in der Regel "Platzhalter sind Pfadspezifikationen" nicht berücksichtigt werden.
Siehe Commit 39e21c6 (25. Januar 2020) von Jeff King (
peff
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 341f8a6 , 12. Februar 2020)( DWIM: Tu was ich meine )
quelle