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ę.
źródło
Odpowiedzi:
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
Na moim pulpicie utworzę jego klon. Może dodam też jakieś pliki
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.
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.
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. -
źródło
Sklonowałbym repozytorium z jednego pudełka do drugiego, a następnie skonfigurowałbym dwa repozytoria tak, żebym mógł tylko
git fetch
z drugiego pudełka.Zmiana nazwy pilota z
origin
na nazwę innego pola sprawia, że zdalne gałęzie są łatwiejsze do odczytania.Zwróć uwagę, że samo użycie
git fetch
(a niegit push
) działa dobrze z nie-nagimi repozytoriami:źródło
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ć:
git remote add desktop ssh://user@desktop/home/user/repo/path
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;)
źródło
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 ...A co powiesz na proste używanie
rsync
?źródło
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 push
aby przesłać zmiany do zdalnego repozytorium. Po powrocie do domu wystarczy przenieśćgit pull
zmiany z pracy na komputer domowy. Podobnie, kiedy kończysz w domu, zrób,git push
a kiedy wrócisz do pracy, zróbgit pull
.źródło
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ć:
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 tak
git 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:
Pracuj nad projektem zdalnym z Eclipse przez SSH
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:
Wejdź na https://github.com i utwórz konto i opcjonalnie (zalecane) skonfiguruj klucze ssh .
Teraz użyj ich interfejsu internetowego, aby utworzyć nowe repozytorium.
Znajdź adres URL nowego repozytorium ssh lub https clone. Np .: [email protected]: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git lub https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .
Sklonuj projekt na PC1. Dawny:
[email protected]:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git cd eRCaGuy_dotfiles
I powtórz dokładnie to samo polecenie klonowania na PC2.
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
Teraz na PC2 pobierz zmiany:
# pull all changes from github (which includes the changes # you just pushed from PC1) to PC2 git pull
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.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.
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.
źródło
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.
źródło
Możesz utworzyć repozytorium na dowolnym komputerze, prawdopodobnie stacjonarnym i wypchnąć / wyciągnąć do niego zarówno z laptopa, jak i siebie.
źródło