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?

Mot
sumber
4
Apakah Anda mempertimbangkan untuk menandai jawaban @ sdram? Itu yang benar.
Ionică Bizău

Jawaban:

93

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).

svick
sumber
238
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)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Ramkumar D
sumber
36
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.

Victor Sergienko
sumber
1

Anda dapat mencoba ini:

git fetch --update-shallow
Altynai
sumber
0

Tak satu pun dari pesan di atas yang berhasil. Saya mencoba bekerja dengan git tag mulai dari klon yang dangkal.

Pertama saya mencoba

git fetch --update-shallow

jenis apa yang bekerja setengah jalan. Namun, tidak ada tag yang tersedia!

git fetch --depth=1000000

Perintah terakhir ini benar-benar mengambil tag dan akhirnya saya bisa mengeksekusi

git checkout -b master-v1.1.0 tags/v1.1.0

dan dilakukan dengan itu.

HTH

Stack
sumber