Co oznaczają podwójne myślniki przed nazwą pliku w tym poleceniu git?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Czy są obowiązkowe? Czy to jest równoważne z
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
git
git-checkout
mottalrd
źródło
źródło
Odpowiedzi:
Załóżmy, że mam plik o nazwie
path/to/file.txt
w moim repozytorium Git i chcę przywrócić w nim zmiany.Załóżmy teraz, że plik ma nazwę
master
...Ups! To zamiast tego zmieniło gałęzie. W
--
oddziela drzewo chcesz sprawdzić z plików, które chcesz sprawdzić.Pomaga nam również, jeśli jakiś dziwak dodał plik o nazwie
-f
do naszego repozytorium:Jest to udokumentowane w git-checkout: Argument Disambiguation .
źródło
--
można użyć do oddzielenia opcji od innych argumentów, więc zobaczysz to w poleceniach takich jakcp
imv
(które nie są częścią Bash).checkout
dokumentacji polecenia?checkout
polecenia, ale dokumentacja nigdzie nie wyjaśnia, co robi ani dlaczego jest używany ... co ostatecznie mnie tu sprowadziło.--
. Jako ktoś, kto nie pochodzi z Linuksa, nie jest oczywiste, co to robi. Wydawało mi się, że jest to składnia specyficzna dla git, bez opisu jego funkcjonalnego celu. Myślę, że lepiej byłoby mieć krótki opis, podobnie jak inne opcje, lub przynajmniej link do strony podręcznika systemu Linux .Podwójny myślnik „-” oznacza „flagi końca wiersza poleceń”, tzn. Informuje poprzednie polecenie, aby nie próbowało analizować tego, co następuje po opcjach wiersza poleceń.
źródło
git
oznacza to więcej niż to, ponieważ oznacza również argument po nazwie--
nie może być nazwą gałęzi, a przez to argument przedtem--
nie może być ścieżką do pliku.Zauważ, że nie byłbyś potrzebny, ponieważ Git 2.5 (Q2 2015) a '
--
', jeśli twój argument zawiera znak wieloznaczny (*
)Heurystyką, która pomaga
git <cmd> <revs> <pathspec>
konwencji wiersza poleceń w przechwytywaniu źle wpisanych ścieżek, jest upewnienie się, że wszystkie parametry non-rev w dalszej części wiersza poleceń to nazwy plików w działającym drzewie, ale to oznacza, żegit grep $str -- \*.c
zawsze musi być „ ” niejednoznaczny z „--
”, ponieważ nikt rozsądny nie utworzy pliku, którego nazwa dosłownie brzmi gwiazdka-kropka-zobacz.Git 2.5 traci heurystykę, aby zadeklarować, że za pomocą łańcucha wieloznacznego użytkownik prawdopodobnie chciałby podać nam ścieżkę .
Zobacz commit 28fcc0b (02 maja 2015) autorstwa Duy Nguyen (
nguyenlocduy
) .(Połączone przez Junio C Hamano -
gitster
- w commit 949d167 , 19 maja 2015)W Git 2.26 (Q1 2020) logika ujednoznacznienia odróżniająca wersje i rozróżnienie ścieżek została zmieniona, tak aby globalne znaki specjalne, które uniknęły odwrotnego ukośnika, nie były uwzględniane w regule „symbole wieloznaczne są ścieżkami”.
Zobacz zatwierdzenie 39e21c6 (25 stycznia 2020 r.) Przez Jeff King (
peff
) .(Połączone przez Junio C Hamano -
gitster
- w commit 341f8a6 , 12 lutego 2020)( DWIM: Rób, co mam na myśli )
źródło