git deposu bilgisayarlar arasında senkronizasyon, hareket ederken?


89

Diyelim ki bir masaüstü bilgisayarım ve bir dizüstü bilgisayarım var ve bazen masaüstünde, bazen de dizüstü bilgisayarda çalışıyorum.

Git deposunu ileri geri taşımanın en kolay yolu nedir?

Git depolarının aynı olmasını istiyorum, böylece diğer bilgisayarda kaldığım yerden devam edebilirim.

Her iki bilgisayarda da aynı dallara ve etiketlere sahip olduğumdan emin olmak istiyorum.

Teşekkürler Johan

Not: Bunu SubVersion ile nasıl yapacağımı biliyorum, ancak bunun git ile nasıl çalışacağını merak ediyorum. Daha kolaysa, klasik sunucu olarak iki bilgisayarın senkronize edebileceği üçüncü bir bilgisayarı kullanabilirim.

Not: Her iki bilgisayar da Linux çalıştırmaktadır.


Güncelleme :

Öyleyse, XANI'nin fikrini bir sunucuda çıplak git deposu ile ve KingCrunch'tan push komutu sözdizimini deneyelim. Bu örnekte iki istemci ve bir sunucu vardır.

Öyleyse önce sunucu kısmını oluşturalım.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

Öyleyse diğer bilgisayarlardan birinden reponun klonlu bir kopyasını almaya çalışıyorum:

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

Ardından bu depoya gidin ve bir dosya ekleyin:

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

Artık sunucu testfile1.txt ile güncellenmiştir.

Her neyse, bakalım bu dosyayı diğer bilgisayardan alabilecek miyiz?

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

Ve şimdi test dosyasını görebiliriz.

Bu noktada onu biraz daha içerikle düzenleyebilir ve sunucuyu tekrar güncelleyebiliriz.

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

Sonra ilk istemciye geri dönüyoruz ve güncellenmiş dosyayı görmek için bir git çekme yapıyoruz. Ve şimdi iki bilgisayar arasında ileri geri hareket edebilir ve istersem üçte birini ekleyebilirim.


Git kullanma işlemini PC1'den PC2'ye hızlı bir şekilde ve düşük veri kullanımıyla, bir cep telefonu wifi hotspot üzerinden bile (bu kullanım durumu için rsync'den yüzlerce kat daha hızlıdır!) Otomatikleştirmek için senkronize komut dosyası: stackoverflow.com/questions / 4948190 /…
Gabriel Staples

Yanıtlar:


28

Bence birden fazla yaklaşım var. Bunu nasıl hallettiğimi sadece tarif edeceğim

Birden çok git deposunu tutan 7/24 sunucu olarak bir netbook'um var. Oradan / Oraya değişiklikleri SSH aracılığıyla itip çekiyorum. Dışarıdan erişim için dyndns.org kullanıyorum. İyi çalışıyor, özellikle bazı depolara erişime ihtiyaç duyan ikiden fazla sistemim olduğu için.

Güncelleme: Küçük bir örnek. Netbook'uma "netbook" diyelim. Orada bir depo oluşturuyorum

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Masaüstümde bunun bir klonunu oluşturacağım. Belki bazı dosyalar da ekleyeceğim

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

Taşınabilir cihazlarımda (önce) aynısını yapacağım, ancak uzaktan erişim için (LAN'ımın dışından), harici adresi de ekleyeceğim.

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

Git (/ git iş akışlarının) çalışma şekli budur. İstediğiniz kadar uzak depo ekleyebilirsiniz. İki veya daha fazla kişinin aynı "fiziksel" depolara atıfta bulunması önemli değildir. Kendi yerel bir "sunucuya" ihtiyacınız yok, ssh erişimine sahip olduğunuz herhangi bir genel sunucuyu kullanabilirsiniz. Ve tabii ki dışarıdan erişime ihtiyacınız yoksa, herkese açık bir sunucuya da ihtiyacınız yok. Çıplak depo aynı zamanda masaüstü sistemde de olabilir ve daha sonra yerel dosya sistemi içinde çalışan bir kopya deposu oluşturabilirsiniz.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

Bu, bununla nasıl başa çıktığım ve benim için oldukça iyi çalışıyor (mükemmel değilse;))

Okunacak bir şey: http://progit.org/ Gerçekten iyi kitap.-


Depoda farklı yollar kullandığınızda bu nasıl görünür? Cevabınızı bir örnekle açıklığa kavuşturmak ister misiniz?
Johan

Teşekkürler, bu örnekler çok netleşti :)
Johan

6

Depoyu bir kutudan diğerine klonlardım ve sonra iki depoyu diğer kutudan yapabilmem için kurardım git fetch.

Uzaktan kumandayı origindiğer kutunun adıyla yeniden adlandırmak, uzak dalların okunmasını kolaylaştırır.

Yalnızca kullanarak git fetch(vegit push ), bunun çıplak olmayan depolarda iyi çalıştığını unutmayın:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo

5

En kolay yol: merkezi repo ile oluşturulmuş --bare (yani teslim alınmış dosyalar yok, yalnızca .git öğeleri) veya github ile oluşturuldu

"Dağıtılmış" şöyle görünecektir:

Kurmak:

  1. Dizüstü bilgisayarda: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. Masaüstünde: git remote add laptop ssh://user@laptop/home/user/repo/path

Senkronizasyon:

git pull laptop/desktop (push, çıplak olmayan depolarda çok iyi çalışmaz çünkü git, uzak depoya gönderirken teslim alınan dosyaları değiştirmez)

Veya pendrive'da repo yapın;)


Çıplak depo kullanmayı denedim, ancak tüm iş akışını doğru yapamıyorum.
Johan

Git ile yeni başlıyorum ve yerel git'ten github'a gidip geri dönüyorum Şimdiye kadar yapabilirim, ancak bilgisayardan bilgisayara yöntemle çalışamıyorum. Aptal soru - hangi kimlik bilgilerini kullanıyorum user? Github için rsa-pub anahtarları eklemem gerekiyor. Bilinen barındırıcılara klon talep eden bilgisayar için rsa-pub eklemeyi denedim, ancak bu hile yapmadı ...
Dave

Bu, iki yerel makine arasında sürekli olarak uzaktaki bir sunucuya çarpmadan senkronizasyon yapmanın en basit yolu.
johnzachary

1

Basitçe kullanmaya ne dersiniz rsync?


3
Üç sunucuyu senkronize tutmak için yıllardır rsync kullandım. Çalışır ancak rsync, senkronizasyon tamamlandıktan sonra değişiklikleri geri almanın bir yolunu sağlamaz. Ayrıca bu şekilde çok fazla dosya kaybettim çünkü kuru çalıştırma çıktısını yeterince yakın okumadım ve rsync ana bilgisayarda bulunmayan dosyaları silecek şekilde ayarlandı. O zamandan beri git'e taşındım ve önemli dizinleri senkronize etmenin çok daha güvenli bir yolunu buldum.
Cloudkiller

1

GitHub, BitBucket veya GitLab üzerinde uzak bir depo oluşturamaz mısınız? (Son iki şirket sınırsız ücretsiz özel havuzlar sunar). Günü işte bitirdiğinizde, git pushdeğişikliklerinizi uzak depoya aktarmak için kullanın . Eve gittiğinizde git pull, değişikliklerinizi işten ev makinenize çekmek için yapmanız yeterli. Aynı şekilde, evde işiniz bittiğinde yapın git pushve sonra işe döndüğünüzde yapın git pull.


Bunu bu şekilde yapmanın sorunu, kodunuzu başka bir makineye aktarabilmeniz için sizi tamamlanmamış işler üzerinde (commit geçmişine gidecek olan) commit yapmaya zorlamasıdır. Bahsettiğiniz kadar basit bir şey yapmanın, ancak bu çöp taahhütlerini yaratmanın ve çöp "transfer" taahhütlerinin üzerine yazmak için tehlikeli -fseçeneği kullanmaktan kaçınmanın bir yolunu arıyorum git push.
Pulseczar

1

Git deposunu [2 bilgisayar arasında] ileri geri taşımanın en kolay yolu nedir?

Senaryo 1: Yalnızca PC1 üzerinde çalışıyorum (kodu ve dosyaları düzenleyin) ancak dosyaların bir kopyasını (örn: tüm kod tabanını oluşturmak için) PC2'de de almak istiyorum.

25 MB'tan az veri kullanırken bir wifi hotspot üzerinden 1 dakikadan az bir sürede PC1'den PC2'ye senkronize edin:

Seyahat ettiğim zayıf bir bilgisayarda (bir dizüstü bilgisayar) çalışıyorum, ancak başka bir yerde bulunan daha güçlü bir bilgisayar üzerinde çalışıyorum. Bir komut dosyası kullanarak dizüstü bilgisayarımdan diğer bilgisayara senkronize etmek için her zaman git kullanıyorum. Çalıştırmak için bu komutu yazıyorum:

sync_git_repo_from_pc1_to_pc2

Bu kadar! Bir cep telefonu wifi etkin noktası kullanırken ve düzinelerce gigabayt boyutunda bir depo üzerinde çalışırken bile, genellikle yaklaşık 25 MB veri ve ~ 30 saniye ila 1 dakika sürer . PC2'ye girdim, yani yapıyorumgit log -1 senkronizasyonun çalıştığını doğrulamak , sonra build komutunu çalıştırıyorum. Mükemmel çalışıyor. Bi dene. Ayrıntılar için aşağıdaki bağlantılara bakın.

Not: PC2'deki klonlanmış repo adlı bir git şubesi üzerinde olacaktır somename_SYNC. Her zaman bir "SYNC dalı" kullanmak yerine aynı şube adına sahip olmasını istiyorsanız, komut dosyasını uygun şekilde değiştirin. İstenirse aşağıdaki Senaryo 2'ye benzer bir etki elde etmek için komut dosyasını değiştirmek mümkündür. Yine de, Senaryo 2'yi manuel olarak yapmak zor değildir, bu nedenle Senaryo 2'yi manuel olarak yapmaya devam etmek isteyebilirsiniz. Otomatikleştirilmiş komut dosyasının en yararlı olduğu ve zaman kazandıran senaryo 1 olduğu, kolay ve hızlı bir "değiştirme, senkronizasyon, oluşturma" iş akışına izin verdiği Senaryo 1'dir. "değiştir" in gerçekleştiği, "senkronizasyonun" PC1'den çalıştırıldığı ancak aynı zamanda PC2 ve "build", PC2'de gerçekleşir.

Bağlantılar:

  1. Tam kurulum ve yükleme talimatları burada:
    SSH aracılığıyla Eclipse ile uzak bir projede çalışın
  2. Benioku, dokümantasyon ve burada repo: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Söz konusu tam komut dosyası burada:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

Senaryo 2: Birden çok bilgisayarda çalışıyorum (kodu ve dosyaları düzenleyin) ve aynı kod deposunu dünyadaki herhangi bir bilgisayardan düzenleyebilmek istiyorum:

Git depolarının aynı olmasını istiyorum, böylece diğer bilgisayarda kaldığım yerden devam edebilirim. Her iki bilgisayarda da aynı dallara ve etiketlere sahip olduğumdan emin olmak istiyorum.

  1. Https://github.com adresine gidin ve bir hesap oluşturun ve isteğe bağlı olarak (önerilir) ssh anahtarlarını ayarlayın .

  2. Şimdi yeni bir depo oluşturmak için web arayüzlerini kullanın.

    1. 2020 yılı veya öncesi itibariyle GitHub, ücretsiz özel depolara da izin verir , bu nedenle bu, özel, kapalı kaynaklı projeler için bile iyi çalışır.
  3. Yeni depo ssh veya https klon URL'sini bulun. Ör: git@github.com: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git veya https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. Projeyi PC1'e klonlayın. Ör:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. Ve PC2'de aynı klon komutunu tekrarlayın.

  6. Şimdi PC1'de, bazı değişiklikler yapın, bunları uygulayın ve github'daki "uzak" deponuza gönderin:

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. Şimdi PC2'de değişikliklerinizi alın:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. Artık PC2'de dosyaları düzenleyebilir, işleyebilir ve yukarıda sadece 2 adımda gösterilen komutları kullanarak onları github'a itebilir ve ardından PC1'den git pullbu değişiklikleri PC2'den almak için çalıştırabilirsiniz.

  9. Bu işlemi gerektiği gibi yapmaya devam edin, PC1 VEYA PC2 üzerinde çalışın ve dosyaları kolayca paylaşın ve işinizi iki bilgisayar arasında bölüştürün. Unutmayın, tüm değişikliklerinizi kontrol etmeden (çekmeden) ve diğer PC'de çalışmaya devam etmeden önce bir PC'deki github'a aktarılması ve gönderilmesi gerekir .

  10. İki bilgisayar arasında dosyaların biraz uyumsuz olduğu bir duruma düşerseniz, belki fazladan bazı dallar kullanmanız, bazı birleştirmeler yapmanız, çakışmaları çözmeniz, vb. Hepinizin aynı depo üzerinde çalıştığı küçük bir ekiple. Google Senin Arkadaşın. Git çok çok çok güçlüdür ve hemen hemen her şey için bir komuta, komut setine veya iş akışına sahiptir.


0

Peki, kurabileceğiniz sunucuya (Git aracılığıyla) itip çekebilirsiniz. Veya depolarınızı GitHub'da depolayabilir ve bunu bir senkronizasyon köprüsü olarak kullanabilirsiniz.


0

Depoyu bilgisayarlarınızdan herhangi birinde, muhtemelen masaüstünde yapabilir ve hem dizüstü bilgisayardan hem de kendisinden itebilir / çekebilirsiniz.

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.