Bagaimana cara mengubah klon dangkal Git menjadi klon penuh?
214
Tindak lanjut dari ini begitu-pertanyaan: jika saya memiliki clone dangkal, bagaimana untuk mengambil semua komit tua untuk membuatnya menjadi clone penuh?
Sekarang sudah git fetch --unshallowada (seperti pada jawaban @ sdram), jawaban ini bukan lagi yang terbaik.
Jack O'Connor
1
@ sdram's jawaban tidak bekerja untuk saya (git versi 2.1.1), tetapi jawaban ini berhasil.
kay - SE itu jahat
2
Tidak ada jawaban yang bekerja untuk saya. Kedua perintah berhasil mengambil semua komit yang hilang, tetapi ketika saya mencoba mendorong komit baru, saya mendapatkan kesalahan tentang server yang tidak mengetahui tentang referensi 'dangkal'
Tyguy7
3
git fetch --depth=2147483647adalah kedalaman terbesar yang mungkin disediakan untuk perintah.
clacke
5
Saya menggunakan git fetch --unshallow, tetapi masih tidak menunjukkan semua cabang.
Sid
674
Perintah di bawah ini (git versi 1.8.3) akan mengubah klon dangkal menjadi klon biasa
git fetch --unshallow
Kemudian, untuk mendapatkan akses ke semua cabang asal (terima kasih @Peter dalam komentar)
Ini tidak membatalkan efek samping --single-branch. Untuk melakukan itu, edit .git / config dan ubah fetch = + ref / head / BRANCHNAME: refs / remote / asal / BRANCHNAME untuk mengambil = + ref / kepala / *: ref / remotes / origin / *
Peter Cordes
3
Ini tidak membuat cabang lokal melacak cabang jarak jauh, jadi Anda masih perlu checkout -b asal BRNAME / BRNAME untuk menyiapkannya.
Peter Cordes
26
Lihat juga stackoverflow.com/questions/17714159/… : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*";git fetch origin dari jawaban harus sama dengan mengedit .git / config dengan tangan
Peter Cordes
Ini hanya berfungsi jika repo ditandai sebagai dangkal. Saya tidak ingat caranya, tetapi ada situasi di mana Anda bisa berakhir dengan repo yang tidak lengkap tanpa secara eksplisit melakukan klon yang dangkal. @ svick's stackoverflow.com/a/6802238/260122 adalah jawaban yang bekerja setiap saat.
clacke
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'bekerja untuk saya
gzaripov
19
Saya perlu memperdalam repo hanya ke komit tertentu.
Setelah membaca man git-fetch, saya mengetahui bahwa seseorang tidak dapat menentukan komit, tetapi dapat menentukan tanggal:
git fetch --shallow-since=15/11/2012
Bagi mereka yang membutuhkan pendalaman tambahan, mankutipan lain :
--deepen=<depth>
Mirip dengan --depth, kecuali itu menentukan jumlah komit dari batas dangkal saat ini dan bukan dari ujung setiap sejarah cabang jarak jauh.
Jawaban:
EDIT:
git fetch --unshallow
sekarang adalah opsi (terima kasih Jack O'Connor).Anda dapat menjalankan
git fetch --depth=1000000
(dengan asumsi repositori memiliki kurang dari satu juta komit).sumber
git fetch --unshallow
ada (seperti pada jawaban @ sdram), jawaban ini bukan lagi yang terbaik.git fetch --depth=2147483647
adalah kedalaman terbesar yang mungkin disediakan untuk perintah.git fetch --unshallow
, tetapi masih tidak menunjukkan semua cabang.Perintah di bawah ini (git versi 1.8.3) akan mengubah klon dangkal menjadi klon biasa
Kemudian, untuk mendapatkan akses ke semua cabang asal (terima kasih @Peter dalam komentar)
sumber
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*";
git fetch origin
dari jawaban harus sama dengan mengedit .git / config dengan tangangit fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'
bekerja untuk sayaSaya perlu memperdalam repo hanya ke komit tertentu.
Setelah membaca
man git-fetch
, saya mengetahui bahwa seseorang tidak dapat menentukan komit, tetapi dapat menentukan tanggal:Bagi mereka yang membutuhkan pendalaman tambahan,
man
kutipan lain :sumber
Anda dapat mencoba ini:
sumber
Tak satu pun dari pesan di atas yang berhasil. Saya mencoba bekerja dengan git tag mulai dari klon yang dangkal.
Pertama saya mencoba
jenis apa yang bekerja setengah jalan. Namun, tidak ada tag yang tersedia!
Perintah terakhir ini benar-benar mengambil tag dan akhirnya saya bisa mengeksekusi
dan dilakukan dengan itu.
HTH
sumber