synchronizacja repozytorium git między komputerami podczas poruszania się?

89

Powiedzmy, że mam komputer stacjonarny i laptop i czasami pracuję na komputerze stacjonarnym, a czasami na laptopie.

Jaki jest najłatwiejszy sposób przenoszenia repozytorium git w tę iz powrotem?

Chcę, aby repozytoria git były identyczne, abym mógł kontynuować od miejsca, w którym wyszedłem na drugim komputerze.

Chciałbym się upewnić, że mam te same gałęzie i tagi na obu komputerach.

Dzięki, Johan

Uwaga: wiem, jak to zrobić z SubVersion, ale jestem ciekawy, jak to zadziała z git. Jeśli jest to łatwiejsze, mogę użyć trzeciego komputera jako klasycznego serwera, z którym oba komputery mogą się synchronizować.

Uwaga: na obu komputerach działa Linux.


Aktualizacja :

Wypróbujmy więc pomysł XANI: z gołym repozytorium git na serwerze i składnią poleceń push z KingCrunch. W tym przykładzie jest dwóch klientów i jeden serwer.

Więc najpierw utwórzmy część serwera.

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

Więc wtedy z jednego z pozostałych komputerów próbuję pobrać kopię repozytorium z klonem:

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.

Następnie przejdź do tego repozytorium i dodaj plik:

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

Teraz serwer jest aktualizowany za pomocą pliku testfile1.txt.

W każdym razie zobaczmy, czy uda nam się pobrać ten plik z innego komputera.

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

Teraz możemy zobaczyć plik testowy.

W tym momencie możemy edytować go z większą zawartością i ponownie zaktualizować serwer.

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

Następnie wracamy do pierwszego klienta i wykonujemy polecenie git pull, aby zobaczyć zaktualizowany plik. Teraz mogę poruszać się między dwoma komputerami i dodać trzeci, jeśli zechcę.

Johan
źródło
Skrypt synchronizacji, aby zautomatyzować proces używania git do synchronizacji z PC1 do PC2 szybko i przy niskim zużyciu danych, nawet przez hotspot Wi-Fi w telefonie komórkowym (jest setki razy szybszy niż rsync w tym przypadku!): Stackoverflow.com/questions / 4948190 /…
Gabriel Staples

Odpowiedzi:

27

Myślę, że istnieje wiele podejść. Opiszę tylko, jak sobie z tym radzę

Mam jeden netbook jako serwer 24/7, na którym znajduje się wiele repozytoriów git. Stamtąd i tam pcham i ściągam zmiany przez SSH. Aby uzyskać dostęp z zewnątrz, używam dyndns.org. Działa dobrze, zwłaszcza, że ​​mam więcej niż dwa systemy, które potrzebują dostępu do niektórych repozytoriów.

Aktualizacja: Mały przykład. Powiedzmy, że mój netbook nazywa się „netbook”. Tam tworzę repozytorium

$ ssh [email protected]
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Na moim pulpicie utworzę jego klon. Może dodam też jakieś pliki

$ git clone [email protected]:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

Na moich urządzeniach przenośnych zrobię (najpierw) to samo, ale dla zdalnego dostępu (spoza mojej sieci LAN) dodam również adres zewnętrzny.

$ git clone [email protected]:/home/username/git/newThing
$ git remote add externalName [email protected]:/home/username/git/newThing
$ git pull externalName master

To po prostu sposób, w jaki działa git (przepływy pracy / git). Możesz dodać dowolną liczbę zdalnych repozytoriów. Nie ma znaczenia, jeśli dwa lub więcej odwołuje się do tych samych „fizycznych” repozytoriów. Nie potrzebujesz własnego "serwera", możesz użyć dowolnego serwera publicznego, do którego masz dostęp ssh. I oczywiście nie potrzebujesz w ogóle serwera publicznego, jeśli nie potrzebujesz dostępu z zewnątrz. Czyste repozytorium może również znajdować się w systemie stacjonarnym, a następnie można utworzyć repozytorium kopii roboczej w lokalnym systemie plików.

$ 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

Tak to sobie z tym radzę i jak dla mnie działa całkiem nieźle (jeśli nie idealnie;))

Coś do przeczytania: http://progit.org/ Naprawdę dobra książka. -

KingCrunch
źródło
Jak by to wyglądało, gdybyś używał różnych sposobów do repozytorium? Czy chciałbyś wyjaśnić swoją odpowiedź na przykładzie?
Johan
Dzięki, te przykłady bardzo się wyjaśniły :)
Johan,
6

Sklonowałbym repozytorium z jednego pudełka do drugiego, a następnie skonfigurowałbym dwa repozytoria tak, żebym mógł tylko git fetchz drugiego pudełka.

Zmiana nazwy pilota z originna nazwę innego pola sprawia, że ​​zdalne gałęzie są łatwiejsze do odczytania.

Zwróć uwagę, że samo użycie git fetch(a nie git push) działa dobrze z nie-nagimi repozytoriami:

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

[user@bar repo]$ git fetch -v foo
ndim
źródło
5

Najłatwiejszy sposób: centralne repozytorium utworzone za pomocą --bare(więc żadnych wyewidencjonowanych plików, tylko rzeczy .git) lub github

„Rozproszone” będzie wyglądać następująco:

Ustawiać:

  1. Na laptopie: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. Na komputerze: git remote add laptop ssh://user@laptop/home/user/repo/path

Synchronizacja:

git pull laptop/desktop (push nie będzie działał zbyt dobrze na non-bare repo, ponieważ git nie zmodyfikuje wyewidencjonowanych plików podczas wypychania do zdalnego repozytorium)

Lub zrób repo na pendrive;)

XANi
źródło
Próbowałem użyć --bare repo, ale nie mogę uzyskać prawidłowego całego przepływu pracy.
Johan
Właśnie zaczynam od git i przechodzę od lokalnego git do github iz powrotem, które mogę zrobić do tej pory, ale metoda komputer-komputer, której nie mogę uruchomić. Głupie pytanie - do jakich referencji mam używać user? W przypadku github muszę tylko dodać klucze rsa-pub. Próbowałem dodać rsa-pub dla komputera żądającego klonowania do known_hosts, ale to nie rozwiązało problemu ...
Dave
Jest to dla mnie najprostszy sposób synchronizacji między dwoma lokalnymi maszynami bez ciągłego uderzania w zdalny serwer.
johnzachary
1

A co powiesz na proste używanie rsync?

seriyPS
źródło
3
Używam rsync od lat, aby zsynchronizować trzy serwery. Działa, ale rsync nie daje możliwości cofnięcia zmian po zakończeniu synchronizacji. W ten sposób straciłem również wiele plików, ponieważ nie przeczytałem wystarczająco blisko wyniku działania na sucho, a rsync był ustawiony na usuwanie plików, których nie było na wzorcu. Od tego czasu przeniosłem się na git i uważam, że jest to znacznie bezpieczniejszy sposób na synchronizację ważnych katalogów.
Cloudkiller
1

Czy nie mógłbyś po prostu utworzyć zdalnego repozytorium na GitHub, BitBucket lub GitLab? (Dwie ostatnie firmy oferują nieograniczone bezpłatne prywatne repozytoria). Kiedy skończysz dzień w pracy, po prostu użyj, git pushaby przesłać zmiany do zdalnego repozytorium. Po powrocie do domu wystarczy przenieść git pullzmiany z pracy na komputer domowy. Podobnie, kiedy kończysz w domu, zrób, git pusha kiedy wrócisz do pracy, zrób git pull.

Studentka
źródło
1

Jaki jest najłatwiejszy sposób przenoszenia repozytorium git tam iz powrotem [między 2 komputerami]?

Scenariusz 1: Pracuję (edytuję kod i pliki) wyłącznie na PC1, ale chcę mieć zduplikowaną kopię plików (np. Zbudować całą bazę kodu) również na PC2.

Synchronizacja z PC1 do PC2 w <1 minutę przez hotspot Wi-Fi przy użyciu <25 MB danych:

Pracuję na jednym słabym komputerze, z którym podróżuję (laptopie), ale pracuję na mocniejszym komputerze znajdującym się gdzie indziej. Cały czas używam git do synchronizacji z mojego laptopa do innego komputera za pomocą skryptu. Po prostu wpisuję to polecenie, aby go uruchomić:

sync_git_repo_from_pc1_to_pc2

Otóż ​​to! Zwykle zajmuje to około 25 MB danych i ~ 30 sekund do 1 minuty, nawet podczas korzystania z hotspotu Wi-Fi w telefonie komórkowym i pracy z repozytorium o rozmiarze kilkudziesięciu gigabajtów . Jestem włączony do PC2, więc takgit log -1 na PC2, aby sprawdzić, czy synchronizacja działa, a następnie uruchamiam polecenie kompilacji. Działa świetnie. Spróbuj. Zobacz poniższe linki, aby uzyskać szczegółowe informacje.

Uwaga: sklonowane repozytorium na PC2 będzie znajdować się w gałęzi git o nazwie somename_SYNC. Zmodyfikuj odpowiednio skrypt, jeśli chcesz, aby miał taką samą nazwę gałęzi zamiast zawsze używać „gałęzi SYNC”. W razie potrzeby można zmodyfikować skrypt, aby uzyskać efekt bardziej podobny do scenariusza 2 poniżej. Niemniej jednak ręczne wykonanie Scenariusza 2 nie jest trudne, więc możesz po prostu kontynuować ręczne wykonywanie Scenariusza 2. To scenariusz 1, w którym automatyczny skrypt jest najbardziej korzystny i oszczędza czas, ponieważ umożliwia łatwy i szybki przepływ pracy „modyfikuj, synchronizuj, buduj” którym „modyfikuj” odbywa się na komputerze PC1, „synchronizacja” jest uruchamiana z komputera PC1, ale wpływa również PC2, a „budowanie” odbywa się na PC2.

Spinki do mankietów:

  1. Pełne instrukcje konfiguracji i instalacji tutaj:
    Pracuj nad projektem zdalnym z Eclipse przez SSH
  2. Plik Readme, dokumentacja i repozytorium tutaj: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Dokładny skrypt, o którym mowa, jest tutaj:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

Scenariusz 2: Pracuję (edytuję kod i pliki) na wielu komputerach i chcę mieć możliwość edycji tego samego repozytorium kodu z dowolnego komputera na świecie:

Chcę, aby repozytoria git były identyczne, abym mógł kontynuować od miejsca, w którym wyszedłem na drugim komputerze. Chciałbym się upewnić, że mam te same gałęzie i tagi na obu komputerach.

  1. Wejdź na https://github.com i utwórz konto i opcjonalnie (zalecane) skonfiguruj klucze ssh .

  2. Teraz użyj ich interfejsu internetowego, aby utworzyć nowe repozytorium.

    1. Od roku 2020 lub wcześniej, GitHub zezwala również na bezpłatne prywatne repozytoria , więc działa to dobrze nawet w przypadku prywatnych projektów o zamkniętym kodzie źródłowym.
  3. Znajdź adres URL nowego repozytorium ssh lub https clone. Np .: [email protected]: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git lub https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. Sklonuj projekt na PC1. Dawny:

     [email protected]:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. I powtórz dokładnie to samo polecenie klonowania na PC2.

  6. Teraz na PC1 wprowadź pewne zmiany, zatwierdź je i prześlij do swojego „zdalnego” repozytorium na github:

     # 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. Teraz na PC2 pobierz zmiany:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. Teraz możesz edytować pliki na PC2, zatwierdzać je i przesyłać na github za pomocą poleceń pokazanych tylko w 2 krokach powyżej, a następnie z PC1 możesz uruchomić git pull aby pobrać te zmiany z PC2.

  9. W razie potrzeby kontynuuj ten proces, pracując na PC1 LUB PC2 i łatwo udostępniaj pliki i dzieląc swoją pracę między dwoma komputerami. Pamiętaj tylko, że wszystkie zmiany muszą zostać zatwierdzone i przesłane do github na jednym komputerze, zanim będziesz mógł je sprawdzić (wyciągnąć) i kontynuować pracę na drugim komputerze.

  10. Jeśli kiedykolwiek znajdziesz się w sytuacji, w której pliki są nieco niezsynchronizowane między dwoma komputerami, być może będziesz musiał użyć dodatkowych gałęzi, wykonać kilka połączeń, rozwiązać konflikty itp. Następnie stanie się bardziej podobny do pracy z małym zespołem, w którym wszyscy pracujesz nad tym samym repozytorium. Google to twój przyjaciel. Git jest bardzo, bardzo potężny i ma polecenie, zestaw poleceń lub przepływ pracy dla prawie wszystkiego.

Gabriel Staples
źródło
0

Cóż, możesz wypychać i ściągać (przez Git) na serwer, który mógłbyś potencjalnie skonfigurować. Lub możesz przechowywać repozytoria w GitHub i używać go jako mostu synchronizującego.

mipadi
źródło
0

Możesz utworzyć repozytorium na dowolnym komputerze, prawdopodobnie stacjonarnym i wypchnąć / wyciągnąć do niego zarówno z laptopa, jak i siebie.

Kerhong
źródło