Saya memiliki proyek di bawah kontrol versi Git yang saya kerjakan pada server dan komputer lokal saya. Saya awalnya memiliki asal remote yang ditetapkan sebagai komputer lokal saya tetapi saya sekarang ingin mengubahnya ke BitBucket.
Di server saya menggunakan perintah
git remote set-url origin bitbucket_address
Tetapi sekarang ketika saya mencoba untuk mendorong proyek saya, saya mendapatkan kesalahan
! [remote rejected] master -> master (shallow update not allowed)
Apa yang menyebabkan ini dan bagaimana cara memperbaikinya?
git clone --depth
?shallow
di.git
folder Anda .shallow
file.Jawaban:
Sepertinya Anda sudah terbiasa
git clone --depth <number>
mengkloning versi lokal Anda. Ini menghasilkan klon yang dangkal . Salah satu batasan kloning tersebut adalah Anda tidak bisa mendorongnya ke repositori baru .Anda sekarang memiliki dua opsi:
Jadi, Anda ingin menyimpan sejarah Anda, kan? Ini berarti Anda harus membatalkan repositori Anda. Untuk melakukannya, Anda perlu menambahkan remote lama Anda lagi.
Setelah itu kami gunakan
git fetch
untuk mengambil riwayat yang tersisa dari remote lama (seperti yang disarankan dalam jawaban ini ).Dan sekarang Anda harus bisa mendorong ke repositori jarak jauh baru Anda.
Catatan : Setelah menghapus klon Anda, Anda dapat menghapus remote yang lama lagi.
sumber
git fetch --unshallow
dapat mengambil refspec hanya membatalkan unshow cabang tertentu daripada seluruh repo. Contoh:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
memiliki 20 komitmen di depanoldrepo/master
ketika Andaclone --depth 1
mengeditnya, dan Anda telah membuat 17 komitmen lokal sejak itu, itu sudah cukup bagi Anda untuk melakukangit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(permintaan maaf untuk kesalahan off-by-one), dan kemudian Anda dapat melakukannyagit push oldrepo master
tanpa insiden (mungkin memerlukan git 1.9.0 atau lebih baru).Dalam hal repo Anda
origin
, dan repo asli adalahupstream
:sumber
Opsi lain jika Anda ingin mempertahankan repo seperti halnya dengan komit baru yang telah Anda tambahkan sejak awal, komit awal adalah ini: Ubah komit ini dengan rebase interaktif .
Mulai rebase interaktif termasuk komit (root) pertama dengan
Ubah
pick
komitmen awal keedit
dan simpan & tutup file.Jika Anda mengkloning repo dengan kedalaman lebih dari 1, Anda mungkin perlu melakukan hal yang sama untuk semua komitmen tersebut. Atau, sebagai alternatif, jalankan
fixup
untuk semua ini selama rebase interaktif.Konversi komit ini menjadi komit reguler dan tidak dangkal dengan
Ini juga akan mengubah ID komit dan menambahkan Anda sebagai penulis bersama untuk komit awal ini.
Jangan lupa untuk menyelesaikan rebase Anda
sumber
Jika Anda ingin mendorong repo baru apa adanya, Anda dapat mencoba ini:
old git folder
dari repo Anda saat ini,sudo rm -rf .git
git init
git remote add your-new-repo
sumber
Jika mengambil --unshallow tidak berfungsi. Pasti ada beberapa masalah dengan cabang Anda. Perbaiki dengan perintah berikut sebelum mendorongnya.
Lakukan ini hanya dengan --unshallow tidak berfungsi karena ada masalah KESELAMATAN .
sumber