Bagaimana cara mengubah klon dangkal Git menjadi klon penuh?


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


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

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.



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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.