Saya membuat repo telanjang, untuk mempublikasikan repositori saya, tetapi saya tidak tahu cara memperbarui repo telanjang dengan keadaan repositori utama saat ini.
Saya membuat repo telanjang, untuk mempublikasikan repositori saya, tetapi saya tidak tahu cara memperbarui repo telanjang dengan keadaan repositori utama saat ini.
Jawaban:
Jika Anda ingin menduplikasi semua objek dari repo utama, lakukan ini di dalam repo utama:
git push --all <url-of-bare-repo>
Atau, lakukan pengambilan di dalam repo telanjang:
git fetch <url-of-main-repo>
Anda tidak dapat melakukan tarikan, karena tarikan ingin digabung dengan HEAD, yang tidak dimiliki repo telanjang.
Anda dapat menambahkan ini sebagai remote untuk menghemat beberapa pengetikan di masa mendatang:
git remote add <whatever-name> <url-of-other-repo>
Maka Anda bisa melakukannya
git push --all <whatever-name>
atau
git fetch <whatever-name>
tergantung pada apa repo Anda berada di. Jika <whatever-name>adalah origin, Anda bahkan dapat meninggalkan keluar sama sekali.
Penafian: Saya bukan guru git. Jika saya mengatakan sesuatu yang salah, saya ingin tercerahkan!
Perbarui: Baca komentar!
git-fetch --alldi dalam repositori telanjang, saya tidak melihat pembaruan yang telah saya buat untuk repo utama, tetapi ketika mendorong mereka dari repo utama dengan git push --all <url-of-bare-repo>saya melihat pembaruan di git log. Mungkin ada penjelasan sederhana untuk ini - dapatkah seseorang menjelaskan?
git logtidak menunjukkan pembaruan ini di repo telanjang. (Tidak juga git log --all, dan repo yang berfungsi yang dibuat dengan mengkloning repo telanjang - baik melalui git log --allatau hanya dengan melihat file baru yang akan ditampilkan di sana). Ini tes yang cukup cepat untuk dilihat sendiri. Kebanyakan saya hanya ingin tahu apa yang saya lewatkan.
git fetch -q origin master:masterdi dalam repo telanjang lokal Anda. Ini akan mengambil barang baru dari cabang utama github dan memperbarui cabang master lokal Anda ke sana.
master:masterapa yang diperlukan untuk memajukan HEAD ke repo jarak jauh. Dalam kasus saya karena masalah, saya tidak bisa lagi terhubung ke repo telanjang kami karena git hilang. Sampai selesai, saya membuat terowongan terbalik dan mengambil repo pusat menggunakan: git fetch ssh://localhost:8765/... master:masterdan itu berfungsi seperti pesona. Terima kasih!
git fetch origin *:*
Saya membuat repositori menggunakan perintah berikut
git clone --bare <remote_repo>
Kemudian saya mencoba memperbarui klon telanjang menggunakan jawaban oleh Thomas, tetapi itu tidak berhasil bagi saya. Untuk mendapatkan repositori kosong yang diperbarui (yang menurut saya diminta oleh Let_Me_Be), saya harus membuat repositori mirror:
git clone --mirror <remote_repo>
Kemudian saya bisa menjalankan perintah berikut di repositori mirrored untuk mengambil pembaruan repositori utama:
git fetch --all
Saya menemukan solusi ini dengan membaca Mirror a Git Repository By Pulling
[remote "origin"]bagian ini, tambahkan fetch = +refs/*:refs/*danmirror = true
Satu-satunya solusi selain membuat ulang git clone --mirroradalah dari Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
maka Anda bisa git fetchdan Anda akan melihat pembaruan. Yang aneh adalah bahwa sebelum ini, meskipun ada yang remotedikonfigurasi, tidak memiliki cabang yang terdaftar di git branch -a.
git remote updatemelakukan pekerjaan.
--forcedan --prunemasing - masing ke git fetchbaris.
Asumsi:
$ git clone --bare https://github.com/.../foo.git
Ambil dengan:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Catatan: --git-dir=foo.gittidak diperlukan jika Anda cdke direktori terlebih dahulu.
origintidak didefinisikan, Anda selalu dapat mengganti originbagian dengan path / url ke repositori asli Anda. mis$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Setelah banyak bermain-main, saya menemukan bahwa ini bekerja untuk saya.
Sekali:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Setiap kali saya ingin menyinkronkan:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') adalah kuncinya. Jawaban yang bagus, terima kasih!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'adalah jawabannya. Setelah menekan perintah ini, saya bisa git fetchdan repo sinkronisasi dengan yang jauh.
Tambahkan repositori kosong sebagai repositori jarak jauh, lalu gunakan git push.
Bagi saya kombinasi ini berhasil:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
Parameter -u untuk pengambilan diperlukan, jika tidak, saya mendapatkan pesan kesalahan: "Menolak untuk mengambil referensi cabang / kepala / master repositori non-telanjang saat ini" (lihat juga https://stackoverflow.com/a/19205680/4807875 )