Farklı depolardaki git havuzlarını senkronize halde tutmak


34

Küçük bir projeye başlamayı düşünüyorum ve bununla birlikte gitmesini istiyorum.

Bitbucket serbest planlarıyla benim için iyi bir seçenek gibi görünüyor. Bir web arayüzü, Mac OS istemcisi vb. Gibi güzel araçlara sahip olduklarından, git ile çalışmak için ana araç olarak kullanmak istiyorum. Ancak, bir üçüncü taraf hizmetinin neden olabileceği her türlü kazara olabilecek hasara karşı daha yüksek bir koruma sağlamak için, NAS'ı deponun ikinci bir yedek kopyası olarak Git'i de kurmak istiyorum.

Şimdi sorum şu, iki farklı ana bilgisayarda bir depo oluşturmanın ve daha sonra bunları senkronize tutmanın mümkün olup olmadığı? Örneğin, haftada bir kez varsayalım NAS'ımdaki depoyu Bitbucket'teki ile eşleştirmek için güncellediğimi varsayalım. Sonra, Bitbucket ile bir şey olursa, yerel NAS depolama alanımdaki tüm geliştirme geçmişine sahip tam bir depoya sahip olacağım.

Ve tüm geçmişi olan mevcut bir depoyu başka bir git-servisine ithal etmenin bir yolu var mı?


Yansıtmanın ihtiyacım olan şey olduğunu düşünüyorum. Bu makale tam olarak neye ihtiyacım olduğunu açıklıyor gibi görünüyor. Ve bu bir yanı.

Tam tarihte tam kopyalanacağına ve otomatik olarak her iki ana makinedeki depolara otomatik olarak yeni sürümler ekleyeceğine inanıyorum.

Haklı mıyım


xpdev kullanıyorum 2 sistem durumunuzda bennefit'in sizin durumunuzda ne işe yaratacağını merak ediyorum. Sadece her son derlemeden emin olmak için bir usb yedekleme yapıyorum. Ancak temelde versiyonlama xpdev whitin'de gerçekleştirilir, bu yüzden gerçek bir gereklilik değildir. Eğer bir aptal ispat NASS Raid1'e sahipseniz BTW ya da kendi versiyonlama sistemlerinizi çalıştırmayı düşünebilirsiniz, bu nedenle de bazı freeones'ler var
user613326

Ancak 2 yerde tam sürümleme yapmak istiyorum. Eğer üçüncü parti hosting ölürse veya şirket onu
yönetirse

Bu,% 99.9 güvenlik için NAS üzerinde rahatlık ve git için Bitbucket'e sahip olacağım anlamına geliyor.
BartoNaz

Xp-dev'a gelince, bu tür bir şirket ölmezse, kod barındırma planlarını, fiyatlarını vb. Değiştirebilir ya da başka bir şirketle birleşebilir. Ama onlar için paralı bir süt. Ayrıca değerli verileri de yedeklerler. Onların işi yerinde kalmak. 3 geliştiriciyle kullanıyorum ve kodumuz her zaman xp dev'te senkronize edilen yerel bir kaynak kopya bulunan 5 farklı makinede var. Yalnızca birkaç projeniz varsa, XP dev ücretsizdir.
user613326

1
Tabii ki, olası değil. Ama yine de, asla% 100 emin
olamazsın

Yanıtlar:


19

Evet, aynen git gibi DVCS'nin güzelliği bu. Bitbucket veya github'daki ile aynı durumdaki herhangi bir sayıda farklı repo kullanabilirsiniz.

Yerel kopya bile (bilgisayarınızdaki depo) genellikle uzaktaki deponun tam bir klonudur.

Birden fazla depoyu senkronize etmek için yapmanız gereken tek şey bir tanesini çekmek (genellikle kaynak kodlu kaynak veya başlangıç) ve yedek kopyalara basmaktır.


11
Maalesef hepsi o kadar parlak değil. Afete yakın KDE'nin ihtiyati tedbirine bakınız . Olduğundan emin olun yedekleme yapar değil yedeklenmiş sunucuda silinen silme şeyler (dallar, depoları, vs.).
Jan Hudec

Hala doğru anladığımdan emin değilim. Anladığım kadarıyla, itme ve çekme belirli bir sürüm ile çalışır. Ancak diyelim ki, çalışma makinemde kodun son bir sürümü var. Uzak makinede (Bitbucket, Github veya başka herhangi bir şey), çalışma alanında çalıştığım en yeni sürüme kadar kod geliştirmenin tam geçmişine sahip olan git deposuna sahibim. Ve NAS'ta boş olan bir depo var. Kodun tüm geçmişini uzaktaki bilgisayardan NAS'ıma aktarabilir miyim, böylece iki yerde aynı iki depoya sahip olabilirim, ve nasıl?
BartoNaz

2
Uzak depoyu klonlayın, ardından tüm güncellemeleri (tüm dalları) düzenli aralıklarla kendisine çekin. Bir git klonu geçmişi içerir, yalnızca en son sürüme sahip olan bir svn kasası gibi değildir.
Wilbert,

11

Sorun için test edilmiş bir çözüm: Otomatik Senkronizasyon 2 Uzak Git Depoları

2 uzak Git deposunu senkronize etmek için basit bir komut dosyası

Web'i senkronize edecek basit bir komut dosyası için aradım. 2 uzak havuz ama böyle bir senaryo bulamadım, pek çoğu onu aramış gibi görünüyor! Böylece 2 basit test havuzu oluşturdum ve bu senaryoyu test etmeye ve oluşturmaya başladım.

Böyle bir komut dosyası ne yapmalı?

Genel olarak, bunu yapma adımları basittir: 1. İlk depoyu klonla 1. İkinciyi ek bir uzaktan depo olarak ekle 1. hepsini ikinci depoda topla uzak depolar.

Kalan sorun şudur - yukarıdaki git komutlarının tümü için doğru anahtarlar nelerdir?

İşte burada...

2repos-sync.sh gisp betiği

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

NOT - bu senaryo depo içeriği arasındaki uyuşmazlık vakalarını çözmüyor!


Cevabınızda, yaptığınız ilk şeyin $ REPO_NAME adlı var olan yerel bir dizini silmek olduğunu söylemek isteyebilirsiniz. Bu önemli görünüyor ve çözümünüzü basit bir şekilde kopyalayan insanlar için veri kaybını önleyebilir.
Wilbert

Bununla devam etmek için, LibGit2 bu tür şeyler için kullanışlıdır.
RubberDuck

0

Tüm depolarımı depolamak için özel bir GitLab kullanıyorum, bu yüzden günden güne gelişirken sadece bir kökenden itip çekiyorum.

Ancak, açık kaynaklı projeler için GitHub çok daha canlı bir topluluk, bu yüzden projelerime topluluk katkıları kabul etmek istersem, çalıştığım bir sunucuya ping yapmak için web GitLab'ın web hook sistemini kullanıyorum;

Bu, GitHub'a birisinin katkıda bulunduğunda alabileceğim başka bir uzaktan kumanda gibi davranmama izin veriyor - sonra yerel olarak birleştirme yapıyorum - ve tüm birincil ve genel depolarımın değişiklikleri nasıl dağıttığına dair bir akış var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.