Apa arti dari tanda hubung ganda sebelum nama file dalam perintah git ini?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Apakah itu wajib? Apakah ini setara dengan
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
git
git-checkout
mottalrd
sumber
sumber
Jawaban:
Misalkan saya memiliki file bernama
path/to/file.txt
di repositori Git saya, dan saya ingin mengembalikan perubahan padanya.Sekarang anggaplah file tersebut bernama
master
...Aduh! Itu mengubah cabang sebagai gantinya. The
--
memisahkan pohon Anda ingin memeriksa dari file yang ingin memeriksa.Ini juga membantu kita jika beberapa freako menambahkan file bernama
-f
ke repositori kita:Ini didokumentasikan di git-checkout: Argument Disambiguation .
sumber
--
dapat digunakan untuk memisahkan opsi dari argumen lain, sehingga Anda akan melihatnya pada perintah likecp
danmv
(yang bukan bagian dari Bash).checkout
dokumentasi perintah?checkout
perintah, tetapi tidak ada dokumentasi yang menjelaskan apa yang dilakukannya atau mengapa itu digunakan ... yang akhirnya membawa saya ke sini.--
. Sebagai seseorang yang tidak berasal dari latar belakang linux, tidak jelas apa yang dilakukannya. Bagi saya, itu tampaknya sintaks khusus untuk git, tanpa deskripsi tujuan fungsionalnya. Saya pikir akan lebih baik untuk memiliki deskripsi singkat seperti opsi lain, atau setidaknya tautan ke halaman manual linux .Tanda hubung ganda "-" berarti "akhir dari bendera baris perintah" yaitu, ia memberi tahu perintah sebelumnya untuk tidak mencoba menguraikan apa yang muncul setelah opsi baris perintah.
sumber
git
dalamnya berarti lebih dari ini, karena itu juga berarti argumen setelah--
tidak bisa menjadi nama cabang, dan dengan implikasi argumen sebelumnya--
tidak dapat menjadi path file.Perhatikan bahwa Anda tidak perlu, karena Git 2.5 (Q2 2015) a '
--
' jika argumen Anda menyertakan wildcard (*
)Heuristik untuk membantu "
git <cmd> <revs> <pathspec>
" konvensi baris perintah untuk menangkap jalur yang salah ketik adalah memastikan bahwa semua parameter non-rev di bagian selanjutnya dari baris perintah adalah nama file di pohon kerja, tetapi itu berarti "git grep $str -- \*.c
" harus selalu disatukan dengan "--
", karena tidak ada yang waras akan membuat file yang namanya secara harfiah asterisk-dot-see.Git 2.5 kehilangan heuristik untuk menyatakan bahwa dengan string wildcard, pengguna mungkin bermaksud memberi kita pathspec .
Lihat komit 28fcc0b (02 Mei 2015) oleh Duy Nguyen (
nguyenlocduy
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komitmen 949d167 , 19 Mei 2015)Dengan Git 2.26 (Q1 2020), logika disambiguasi untuk membedakan revisi dan pathspec telah di-tweak sehingga karakter-karakter khusus glob yang lolos dari backslash tidak dihitung dalam aturan "wildcard is pathspec".
Lihat komit 39e21c6 (25 Jan 2020) oleh Jeff King (
peff
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 341f8a6 , 12 Feb 2020)( DWIM: Lakukan Apa yang Saya Maksud )
sumber