Bagaimana cara memperbarui git clone --mirror?

144

Saya telah membuat repositori git untuk mencerminkan situs langsung (yang merupakan repositori non-telanjang):

git clone --mirror ssh://[email protected]/path/to/repo

Sekarang, untuk menjaga agar klon cermin ini diperbarui dengan semua perubahan dari asalnya yang jauh, perintah atau perintah mana yang harus saya gunakan?

Saya ingin menjaga semuanya diperbarui: melakukan, ref, kait, cabang, dll.

Terima kasih!

J. Bruni
sumber

Jawaban:

213

Ini adalah perintah yang perlu Anda jalankan di cermin:

git remote update
ralphtheninja
sumber
@ Magus Skog: Luar biasa. Terima kasih! Apakah ini semua? Apakah saya perlu perintah lain git fetch? Atau git remote updatesendirian akan melakukan semuanya?
J. Bruni
11
Saya juga ingin tahu apa perbedaan yang harus diambil git.
Thorbjørn Ravn Andersen
1
@ Thorbjörn (Anda harus melakukan dengan Swedia ö :)): Git fetch hanya memperbarui repositori Anda dengan referensi jarak jauh dari jarak jauh. Perintah ini memperbarui semua yang ada di repositori cermin.
ralphtheninja
4
Inilah jawaban bagus yang menjelaskan lebih lanjut: stackoverflow.com/questions/3959924/…
ralphtheninja
16
'git remote update --prune' akan melakukan semua ini, tetapi hapus cabang ketika mereka dihapus dari repositori asli.
teeks99
8

Mengenai komit, ref, cabang dan " et cetera ", jawaban Magnus hanya berfungsi ( git remote update).

Tapi sayangnya tidak ada cara untuk clone/ mirror / update kait , seperti yang saya inginkan ...

Saya telah menemukan utas yang sangat menarik tentang kloning / mirroring the hooks:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Aku telah belajar:

  • Kait tidak dianggap sebagai bagian dari konten repositori.

  • Ada lebih banyak data, seperti .git/descriptionfolder, yang tidak mendapatkan kloning, seperti halnya kait.

  • Kait default yang muncul di hooksdir berasal dariTEMPLATE_DIR

  • Ada templatefitur menarik di git.

Jadi, saya bisa mengabaikan "clone the hooks thing" ini, atau memilih rsyncstrategi, mengingat tujuan mirror saya (hanya cadangan + sumber untuk klon lain).

Yah ... Saya hanya akan lupa tentang kloning kait, dan tetap di git remote updatejalan.

  • Sehe baru saja menunjukkan bahwa tidak hanya "kait" tidak dikelola oleh proses clone/ update, tetapi juga simpanan, rerere, dll ... Jadi, untuk cadangan yang ketat, rsyncatau setara akan benar-benar cara untuk pergi. Karena ini tidak benar - benar diperlukan dalam kasus saya (saya tidak dapat memiliki kait, simpanan, dan sebagainya), seperti yang saya katakan, saya akan tetap menggunakan remote update.

Terima kasih! Memperbaiki sedikit "git-fu" saya sendiri ... :-)

J. Bruni
sumber
5

Lihat di sini: Git tidak mengkloning semua cabang pada klon berikutnya?

Jika Anda benar-benar menginginkan ini dengan menarik cabang alih-alih push --mirror, Anda dapat melihatnya di sini:

"fetch --all" di repositori git bare tidak menyinkronkan cabang lokal ke yang jauh

Jawaban ini memberikan langkah-langkah terperinci tentang cara mencapai hal itu dengan relatif mudah:

lihat
sumber
1
pushbukan pilihan bagi saya karena saya harus melakukannya di sisi penerima (dari tempat klon berada); pulljuga bukan pilihan karena repositori cermin adalah repositori kosong (tidak ada pohon yang berfungsi, jadi tidak ada "tarikan") - tampaknya git remote updatememang semuanya (jauh lebih mudah daripada jawaban yang dirujuk) ... Pokoknya, terima kasih! Tentu saja ada informasi berharga dalam pertanyaan / jawaban terkait.
J. Bruni
1
ok, maksudku menarik seperti dalam bahasa biasa. Teknologi push and pull. Hampir tidak ada kata lain kecuali 'dapatkan data dari jarak jauh secara aktif di klien' yang tidak masuk akal yang tidak akan menjuluki kata yang memiliki arti untuk sistem git atau DVCS :) Tautan kedua akan memberikan rincian yang Anda inginkan. Catatan, bahwa 'git remote update' sebenarnya tidak mempertahankan status 'mirror' tanpa operasi tambahan yang disebutkan di sana
sehe
1
hmm ... maaf (HTH) - sepertinya cermin "absolut" lebih mudah dicapai melalui "rsync" sederhana dari folder repo asli ... bukan yang saya inginkan, tapi .. saya hanya melakukan beberapa tes ... dan sepertinya tidak ada yang menyalin kait - yang saya sangat tertarik ...
J. Bruni
1
FYI, tujuan dari mirror ini adalah ini, hanya: 1) menyelesaikan backup dari tempat saya dapat mengembalikan jika data di server repo asli hilang; 2) di suatu tempat dari mana orang lain dapat mengkloning dan mendapatkan repo kerja lokal, tanpa memiliki akses ke repo sumber asli
J. Bruni
1
Jika Anda menginginkan kaitan dan segalanya, gitosis mungkin (tidak ingat betul) memiliki apa yang Anda butuhkan, tetapi saya akan rsyncmendukungnya. Juga, saya berasumsi Anda lupa tentang simpanan (lihat di sini ) dan rerere informasi juga ...?
lihat