Jika cee157
dapat merujuk ke 2 ID komit yang berbeda, seperti
cee157eb799af829a9a0c42c0915f55cd29818d4
dan cee1577fecf6fc5369a80bd6e926ac5f864a754b
akankah Git memperingatkan saya jika saya mengetik git log cee157
? (atau Git 1.8.5.2 (Apple Git-48) memungkinkan saya untuk mengetik git log cee1
).
Saya pikir itu harus, meskipun saya tidak dapat menemukan sumber otoritatif yang mengatakan itu.
man gitrevisions
, yang setidaknya menyiratkan peringatan akan diberikan karena menyatakan bahwa Anda dapat memberi nama revisi dengan nama lengkap SHA1-1 atau "substring utama yang unik dalam repositori".git log c
... dan lihat.git log abc
mengatakanfatal: ambiguous argument 'abc': unknown revision or path not in the working tree.
bahkan jika saya memiliki SHA1 yang unik dimulai denganabc
. Tidak berfungsi dengan 1-2-3 digit, 4 tampaknya menjadi minimum. Diuji pada Windows (1.8.1) dan Mac (1.9.1).minimum_abbrev
ke nilai4
.Jawaban:
Seharusnya memberi Anda sesuatu seperti ini:
Saya baru saja menguji ini pada repositori Git yang asli, dengan menemukan commit dengan duplikat awalan seperti ini:
Ini membawa daftar revisi
master
, memotong 4 karakter pertama dan membuang sisanya, menghitung duplikat dan mengurutkan secara numerik. Dalam repositori saya yang relatif kecil dengan ~ 1500 commit, saya menemukan beberapa revisi dengan awalan 4 digit yang umum. Saya memilih awalan 4 digit karena tampaknya merupakan panjang hukum terpendek yang didukung oleh Git. (Tidak bekerja dengan 3 digit atau kurang, meskipun tidak ambigu.)Btw ini bukan salah ketik, saya tidak tahu mengapa pesan kesalahan tentang SHA1 ambigu muncul dua kali, terlepas dari jumlah duplikat SHA1 (dicoba dengan 2 dan 3):
(Keduanya aktif
stderr
. Sebenarnya seluruh output aktifstderr
, tidak ada yang aktifstdout
.)Diuji di Windows:
Saya pikir aman untuk mengatakan bahwa jika versi Anda> = 1.8.1, Git akan memperingatkan Anda tentang duplikat. (Ini akan menolak untuk beroperasi dengan duplikat.) Saya kira versi yang jauh lebih tua juga bekerja dengan cara ini.
MEMPERBARUI
Saat menguji ini, Anda memerlukan minimum 4 digit SHA1, karena
int minimum_abbrev = 4
di environment.c . (Terima kasih @devnull untuk menunjukkannya!)sumber
Poster asli menyatakan:
Sumber otoritatif dapat ditemukan dalam kode sumber
get_short_sha1()
,.Mengutip ini :
dan ini :
Selain itu, tes juga ada untuk memastikan bahwa fitur berfungsi seperti yang diharapkan.
sumber