Dimulai dengan Git versi 2.5+ (Q2 2015), mengambil komit tunggal (tanpa mengkloning repo penuh) sebenarnya mungkin.
Lihat commit 68ee628 oleh Fredrik Medley ( moroten
) , 21 Mei 2015.
(Digabung oleh Junio C Hamano - gitster
- dalam commit a9d3493 , 01 Jun 2015)
Anda sekarang memiliki konfigurasi baru (di sisi server)
uploadpack.allowReachableSHA1InWant
Izinkan upload-pack
untuk menerima permintaan pengambilan yang meminta objek yang dapat dijangkau dari ujung referensi apa pun. Namun, perhatikan bahwa menghitung jangkauan objek adalah mahal secara komputasi.
Default ke false
.
Jika Anda menggabungkan konfigurasi sisi server dengan clone dangkal ( git fetch --depth=1
), Anda dapat meminta satu komit (lihat t/t5516-fetch-push.sh
:
git fetch --depth=1 ../testrepo/.git $SHA1
Anda dapat menggunakan git cat-file
perintah untuk melihat bahwa komit telah diambil:
git cat-file commit $SHA1
" git upload-pack
" yang berfungsi " git fetch
" dapat diperintahkan untuk melayani komit yang tidak ada di ujung referensi, selama mereka dapat dijangkau dari referensi, dengan uploadpack.allowReachableSHA1InWant
variabel konfigurasi.
Dokumentasi lengkapnya adalah:
upload-pack
: opsional memungkinkan mengambil sha1 yang dapat dijangkau
Dengan uploadpack.allowReachableSHA1InWant
opsi konfigurasi yang diatur di sisi server, " git fetch
" dapat membuat permintaan dengan baris "ingin" yang menamai objek yang belum diiklankan (kemungkinan telah diperoleh dari band atau dari pointer submodule).
Hanya objek yang dapat dijangkau dari ujung cabang, yaitu gabungan cabang dan cabang yang diiklankan yang disembunyikan transfer.hideRefs
, akan diproses.
Perhatikan bahwa ada biaya terkait karena harus berjalan kembali ke sejarah untuk memeriksa jangkauan.
Fitur ini dapat digunakan ketika mendapatkan konten dari komit tertentu, yang sha1 diketahui, tanpa perlu mengkloning seluruh repositori, terutama jika pengambilan dangkal digunakan .
Kasus yang bermanfaat misalnya
- repositori yang berisi file besar dalam sejarah,
- hanya mengambil data yang diperlukan untuk checkout submodule,
- saat berbagi sha1 tanpa memberi tahu cabang mana tepatnya miliknya dan di Gerrit, jika Anda berpikir dalam hal melakukan alih-alih mengubah nomor.
(Kasus Gerrit telah diselesaikan allowTipSHA1InWant
karena setiap perubahan Gerrit memiliki referensi.)
Git 2.6 (Q3 2015) akan meningkatkan model itu.
Lihat komit 2bc31d1 , komit cc118a6 (28 Jul 2015) oleh Jeff King ( peff
) .
(Digabung oleh Junio C Hamano - gitster
- dalam commit 824a0be , 19 Agu 2015)
refs
: dukungan negatif transfer.hideRefs
Jika Anda menyembunyikan hierarki referensi menggunakan transfer.hideRefs
konfigurasi, nantinya tidak ada cara untuk mengesampingkan konfigurasi tersebut untuk "menyembunyikannya".
Tambalan ini menerapkan menyembunyikan "negatif" yang menyebabkan kecocokan segera ditandai sebagai tidak disembunyikan, bahkan jika kecocokan lain akan menyembunyikannya.
Kami berhati-hati untuk menerapkan pertandingan dalam urutan terbalik dari bagaimana mereka diumpankan kepada kami oleh mesin konfigurasi, karena itu memungkinkan pekerjaan prioritas konfigurasi "terakhir yang menang" kami bekerja (dan entri dalam .git/config
, misalnya, akan menimpa /etc/gitconfig
).
Jadi sekarang Anda dapat melakukan:
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
bersembunyi refs/secret
di semua repo, kecuali satu bit publik dalam satu repo tertentu.
Git 2.7 (Nov / Des 2015) akan meningkat lagi:
Lihat komit 948bfa2 , komit 00b293e (5 November 2015), melakukan 78a766a , komit 92cab49 , komit 92cab49 , komit 92cab49 (3 November 2015), melakukan 00b293e , komit 00b293e (5 November 2015), dan komit 92cab49 , komit 92cab49 , komit 92cab49 , commit 92cab49 (03 Nov 2015) oleh Lukas Fleischer ( lfos
) .
Dibantu-oleh: Eric Sunshine ( sunshineco
) .
(Digabung oleh Jeff King - peff
- di commit dbba85e , 20 Nov 2015)
config.txt
: mendokumentasikan semantik hideRefs
dengan namespaces
Saat ini, tidak ada definisi yang jelas tentang bagaimana transfer.hideRefs
seharusnya berperilaku ketika namespace diatur.
Jelaskan bahwa hideRefs
awalan cocok dengan nama yang dilucuti dalam kasus itu. Beginilah hideRefs
pola saat ini ditangani dalam paket-terima.
hideRefs: tambahkan dukungan untuk mencocokkan referensi penuh
Selain mencocokkan ref yang dilucuti, orang sekarang dapat menambahkan hideRefs
pola yang ref penuh (tidak terhalang) dicocokkan.
Untuk membedakan antara kecocokan stripped dan full, pola-pola baru tersebut harus diawali dengan circumflex ( ^
).
Karenanya dokumentasi baru :
transfer.hideRefs:
Jika namespace sedang digunakan, awalan namespace dilucuti dari setiap referensi sebelum dicocokkan dengan transfer.hiderefs
pola.
Misalnya, jika refs/heads/master
ditentukan transfer.hideRefs
dan namespace saat ini adalah foo
, maka refs/namespaces/foo/refs/heads/master
dihilangkan dari iklan tetapi refs/heads/master
dan
refs/namespaces/bar/refs/heads/master
masih diiklankan sebagai apa yang disebut "memiliki" baris.
Untuk mencocokkan ref sebelum stripping, tambahkan ^
di depan nama ref. Jika Anda menggabungkan !
dan ^
, !
harus ditentukan terlebih dahulu.
R .. menyebutkan dalam komentar konfigurasi uploadpack.allowAnySHA1InWant
, yang memungkinkan upload-pack
untuk menerima fetch
permintaan yang meminta objek apa pun. (Default ke false
).
Lihat commit f8edeaa (November 2016, Git v2.11.1) oleh David "novalis" Turner ( novalis
) :
upload-pack
: secara opsional mengizinkan mengambil sha1 apa pun
Tampaknya agak konyol untuk melakukan pemeriksaan reachabilty dalam kasus di mana kami percaya pengguna untuk benar-benar mengakses semua yang ada di repositori.
Juga, itu sangat kuat dalam sistem terdistribusi - mungkin satu server mengiklankan referensi, tetapi yang lain sejak itu telah memaksa-paksa untuk referensi itu, dan mungkin dua permintaan HTTP akhirnya diarahkan ke server yang berbeda ini.