2011-02-09 16 views
73

Załóżmy, że mam komputer stacjonarny i laptop, , a czasami pracuję na komputerze i czasami pracuję na laptopie.Synchronizacja repozytorium git między komputerami podczas przemieszczania się?

Jaki jest najłatwiejszy sposób przenoszenia repozytorium git tam i z powrotem?

Chcę, aby repozytoria git były identyczne, , aby móc kontynuować pracę w miejscu, w którym się znajdowałem na innym komputerze.

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

Dzięki Johan

Uwaga: Wiem, jak to zrobić z Subversion, ale jestem ciekaw, w jaki sposób to będzie działać z git. Jeśli jest to łatwiejsze, mogę użyć trzeciego komputera jako klasycznego serwera, z którym dwa komputery: s mogą zsynchronizować.

Uwaga: na obu komputerach działa system Linux.


Zaktualizuj styl:

Więc spróbujmy XANI: s pomysł z gołego git repo na serwerze i składni poleceń Push od KingCrunch. W tym przykładzie jest dwóch klientów i jeden serwer.

Stwórzmy więc najpierw część serwerową.

ssh [email protected] 
mkdir -p ~/git_test/workspace 
cd ~/git_test/workspace 
git --bare init 

Tak więc z jednej z innymi komputerami próbuję uzyskać kopię repo z klonu:

git clone [email protected]:~/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 przejść do tego repo i dodać 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 plikiem testfile1.txt.

W każdym razie zobaczmy, czy możemy pobrać ten plik z innego komputera.

mkdir -p ~/git_test/repo2 
cd ~/git_test/repo2 
git clone [email protected]:~/git_test/workspace/ 
cd workspace/ 
git pull 

A teraz możemy zobaczyć plik testowy.

W tym momencie możemy edytować go z większą ilością treś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 robimy ciągnięcie git, aby zobaczyć zaktualizowany plik. A teraz mogę poruszać się między dwoma komputerami, i dodać trzeci, jeśli chcę.

Odpowiedz

22

Myślę, że istnieje wiele podejść. Po prostu opiszę, jak sobie z tym poradzić. Mam jeden netbook jako serwer 24/7, który ma wiele repozytoriów git.Od/Do tam pcham i przecią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". Tworzę tam repozytorium:

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

Na moim pulpicie zrobię, niż utworzę jego klon. Może dodam kilka plików również

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

Na moich przenośnych będę (pierwszy) zrobić to samo, ale do zdalnego dostępu (spoza mojej sieci LAN), będę również dodać 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 

Działa tak samo, jak działa Git (/ git workflows). Możesz dodać tyle zdalnych repozytoriów, ile chcesz. Nie ma to znaczenia, jeśli dwa lub więcej odnosi się do tych samych "fizycznych" repozytoriów. Nie potrzebujesz własnego lokalnego "serwera", możesz użyć dowolnego publicznego serwera, do którego masz dostęp ssh. I oczywiście nie potrzebujesz w ogóle publicznego serwera, jeśli nie potrzebujesz dostępu z zewnątrz. Nagie repozytorium może również znajdować się w systemie biurkowym, a następnie można utworzyć działające repozytorium kopii 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 

To jest sposób, w jaki mogę sobie z tym poradzić, i dla mnie to działa całkiem dobrze (jeśli nie jest idealny;))

coś do czytania: http://progit.org/ Naprawdę dobre book.-

+0

Jak by to wyglądało, kiedy używasz różnych sposobów na repo? Czy chciałbyś wyjaśnić swoją odpowiedź na przykładzie? – Johan

+0

Dzięki, te przykłady wyjaśniły wiele :) – Johan

0

Możesz naciskać i ciągnąć (przez Git) na serwer, który możesz skonfigurować. Możesz też przechowywać swoje reposy w GitHub i używać ich jako mostu synchronizującego.

0

Można utworzyć repozytorium na dowolnym komputerze, prawdopodobnie na komputerze stacjonarnym, a następnie przesłać do niego z komputera przenośnego i samego siebie.

1

Co powiesz na proste użycie numeru rsync?

+0

Powinien być bardziej "git-correct" sposób to zrobić? – Johan

+3

Od lat używam rsync do synchronizowania trzech serwerów. Działa, ale rsync nie daje możliwości cofnięcia zmian po zakończeniu synchronizacji. Straciłem tak wiele plików w ten sposób, ponieważ nie przeczytałem wystarczająco suchego wyjścia, a rsync został ustawiony tak, aby usuwać pliki, które nie były obecne w systemie głównym. Od tego czasu przeszedłem do git i znalazłem o wiele bezpieczniejszy sposób synchronizacji ważnych katalogów. – Cloudkiller

6

Sklonowałbym repozytorium z jednego pudła do drugiego, a następnie skonfigurowałem dwie transakcje, tak abym mógł po prostu git fetch z drugiego pola.

Zmiana nazwy pilota z origin na nazwę drugiego pola powoduje, że gałęzie zdalne są łatwiejsze do odczytania.

Należy pamiętać, że tylko przy użyciu git fetch (i nie git push), to dobrze współpracuje z non-gołymi repozytoriów:

[[email protected] repo]$ git fetch -v bar 

[[email protected] repo]$ git fetch -v foo 
4

Najłatwiej: centralne repo tworzone --bare (więc nie wyrejestrowany plików tylko.git rzeczy) lub GitHub

"rozproszone" będzie wyglądać tak:

Setup:

  1. na laptopie: git remote add desktop ssh://[email protected]/home/user/repo/path
  2. Na pulpicie: git remote add laptop ssh://[email protected]/home/user/repo/path

Synchronizacja:

git pull laptop/desktop (push nie będzie działać bardzo dobrze na nie gołymi repo git bo nie zmodyfikuje wyrejestrowany plików podczas pchania do zdalnego repo)

Albo zrobić repo na pendrive;)

+0

Próbowałem użyć --bare repo, ale nie mogę uzyskać prawidłowego przepływu pracy. – Johan

+0

Właśnie zaczynam z git, i przechodzę od lokalnego git do github iz powrotem mogę zrobić do tej pory, ale metoda komputer-komputer nie mogę pracować. Głupie pytanie - jakie dane uwierzytelniające używa się dla "użytkownika"? W przypadku githuba muszę po prostu dodać klucze rsa-pub. Próbowałem dodać rsa-pub dla komputera requestera klonów do known_hosts, ale to nie pomogło ... – Dave

+0

To jest najprostszy sposób synchronizacji między dwiema maszynami lokalnymi bez ciągłego uderzania w serwer zdalny. – johnzachary

1

nie można po prostu stworzyć pilota repozytorium na GitHub, BitBucket lub GitLab? (Dwie ostatnie firmy oferują nieograniczone darmowe prywatne repozytoria). Kiedy zakończysz dzień w pracy, po prostu użyj git push, aby przenieść swoje zmiany do zdalnego repo. Kiedy wrócisz do domu, po prostu wykonaj git pull, aby przenieść swoje zmiany z pracy do komputera domowego. Podobnie, gdy skończysz w domu, wykonaj git push, a następnie po powrocie do pracy wykonaj git pull.

Powiązane problemy