Bu yanıt şu anda yalnızca iki Linux bilgisayar kullanmak için geçerlidir (ya da Mac'te de çalışıyor olabilir mi? - Mac'te test edilmemiş) (birinden diğerine senkronize) çünkü bu senkronizasyon komut dosyasını bash'de yazdım. git
Bununla birlikte, sadece bir sargıdır , bu yüzden onu almaktan ve çapraz platform Python çözümüne veya isterseniz bir şeye dönüştürmekten çekinmeyin.
Bu OP'nin sorusunu doğrudan cevaplamıyor, ancak o kadar yakın ki, bu sayfaya giren diğer birçok insanın sorusunu cevaplayacağını garanti ediyorum (benimki, aslında, kendi çözümümü yazmadan önce buraya geldiğim gibi ) Yine de buraya gönderiyorum.
İstiyorum:
- hafif bir Linux bilgisayarda Eclipse gibi güçlü bir IDE kullanarak kod geliştirin,
- bu kodu ssh ile farklı, daha güçlü bir Linux bilgisayarda oluşturun (komut satırından, Eclipse içinden DEĞİL)
"PC1" kodunu yazdığım ilk bilgisayarı (Kişisel Bilgisayar 1) ve "PC2" kodunu oluşturduğum 2. bilgisayarı arayalım. PC1'den PC2'ye kolayca senkronize etmek için bir araca ihtiyacım var. Denedim rsync
, ancak büyük depolar için inanılmaz derecede yavaştı ve tonlarca bant genişliği ve veri aldı.
Peki, nasıl yaparım? Hangi iş akışını kullanmalıyım? Bu soruya da sahipseniz, işte karar verdiğim iş akışı. git
Github gibi uzak bir depo aracılığıyla PC1'den PC2'ye değişiklikleri otomatik olarak aktarmak için işlemi otomatikleştirmek için bir bash betiği yazdım . Şimdiye kadar çok iyi çalışıyor ve bundan çok memnunum. Benim görüşüme göre çok daha hızlı rsync
, daha güvenilir çünkü her PC işlevsel bir git deposunu koruyor ve tüm senkronizasyonu yapmak için çok daha az bant genişliği kullanıyor, bu nedenle tonlarca veri kullanmadan cep telefonu sıcak noktasında kolayca yapılabilir.
Kurmak:
Komut dosyasını PC1'e yükleyin (bu çözüm ~ / bin'in $ PATH değerinde olduğunu varsayar):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Şimdi yukarıda kopyaladığınız "~ / .sync_git_repo" dosyasını düzenleyin ve parametrelerini durumunuza uyacak şekilde güncelleyin. İçerdiği parametreler şunlardır:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git hem PC1'de hem de PC2'de senkronize etmek istediğiniz deponuzu klonlayın.
- Ssh tuşlarınızın hem PC1 hem de PC2'den uzak depoya itmek ve çekmek için ayarlandığından emin olun. İşte bazı yararlı bağlantılar:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Ssh tuşlarınızın PC1'den PC2'ye ssh olarak ayarlandığından emin olun.
Şimdi cd
PC1'deki git repo içindeki herhangi bir dizine gidin ve çalıştırın:
sync_git_repo_from_pc1_to_pc2
Bu kadar! Yaklaşık 30 saniye sonra her şey sihirli bir şekilde PC1'den PC2'ye senkronize edilecek ve size ne yaptığını ve diskinizde ve hangi bilgisayarda nerede yaptığını söylemek için sürekli baskı çıktısı olacak. Bu da güvenlidir, çünkü taahhüt edilmeyen hiçbir şeyin üzerine yazmaz veya silmez. İlk önce yedekler! Bunun nasıl çalıştığı hakkında daha fazla bilgi edinin.
İşte bu komut dosyasının kullandığı işlem (yani: aslında ne yapıyor)
- PC1'den: PC1'de taahhüt edilmemiş değişiklik olup olmadığını kontrol eder. Eğer öyleyse, onları mevcut şube üzerinde geçici bir taahhütte bulunur. Daha sonra onları uzak bir SYNC dalına zorlar. Daha sonra yerel şubede yaptığı geçici taahhüdünü kaldırır, daha sonra komut dosyasını çağırdığınız sırada önceden hazırlanmış olan dosyaları hazırlayarak yerel git repo'sini tam olarak nasıl geri koyar. Sonra,
rsync
betiğin PC2'ye kopyalanması ve ssh
PC2'ye betiği sadece PC2 şeyler yapmak için özel bir seçenekle çalıştırmasını söyleme çağrısı yapar .
- PC2'nin yaptığı şey şudur:
cd
repoya girer ve herhangi bir yerel taahhüt edilmemiş değişiklik olup olmadığını kontrol eder . Öyleyse, geçerli daldan çatallanmış yeni bir yedekleme dalı oluşturur (örnek adı: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- YYYYMMDD-HHMMhrs - SSsec olduğuna dikkat edin) ve bu dalda taahhüt edilmeyen değişiklikleri YAPMAK gibi bir tamamlama iletisi ile gerçekleştirir. PC2'DE TAHSİSİZ DEĞİŞİKLİKLER (HEDEF PC / YAPI MAKİNESİ). Şimdi, SYNC şubesini kontrol eder ve yerel makinede yoksa uzak depodan çeker. Ardından, uzak depodaki en son değişiklikleri alır ve yerel SYNC deposunu uzak SYNC deposuyla eşleşmeye zorlamak için sert bir sıfırlama yapar. Buna "sert çekme" diyebilirsiniz. Ancak güvenlidir, çünkü PC2'de yerel olarak sahip olduğumuz taahhüt edilmemiş değişiklikleri zaten yedekledik, bu yüzden hiçbir şey kaybolmuyor!
- Bu kadar! Artık komut dosyası sizin için tüm otomatik işlemleri ve işleri gerçekleştirdiğinden, temiz çalışma dizinleri sağlamak zorunda kalmadan PC1'den PC2'ye mükemmel bir kopya ürettiniz! Hızlıdır ve büyük depolarda çok iyi çalışır. Şimdi , depo düzinelerce gigabayt olsa bile ve zamanınız olsa bile, başka bir makinede inşa ederken veya test ederken, seçtiğiniz herhangi bir IDE'yi, gerekirse cep telefonunuzdan bir wifi sıcak noktası üzerinden kolayca kullanmanız için kolay bir mekanizmaya sahipsiniz. ve kaynak kısıtlamalı.
Kaynaklar:
- Tüm proje: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Bu proje içinde kaynak kodun kendisinde tonlarca bağlantı ve referans görün.
- Dediğim gibi "sert çekme" nasıl yapılır : "git pull" i yerel dosyaların üzerine yazmaya nasıl zorlarım?
İlişkili:
- git hareket halindeyken bilgisayarlar arasında veri havuzu senkronizasyonu?