Ta odpowiedź dotyczy obecnie tylko dwóch komputerów z systemem Linux [a może też działa na komputerze Mac? - niesprawdzone na komputerze Mac] (synchronizacja między komputerami), ponieważ napisałem ten skrypt synchronizacji w bash. Jest to jednak tylko opakowanie git
, więc możesz go wziąć i przekształcić w wieloplatformowe rozwiązanie Python lub coś, jeśli chcesz
To nie odpowiada bezpośrednio na pytanie PO, ale jest tak blisko, że gwarantuję, że odpowie na pytanie wielu innych ludzi, którzy wylądują na tej stronie (w tym moje, tak naprawdę, ponieważ przybyłem tu pierwszy przed napisaniem własnego rozwiązania), więc W każdym razie zamieszczam to tutaj.
Chcę:
- opracuj kod za pomocą potężnego IDE, takiego jak Eclipse, na lekkim komputerze z systemem Linux
- zbuduj ten kod przez ssh na innym, mocniejszym komputerze z Linuksem (z wiersza poleceń, NIE z wnętrza Eclipse)
Nazwijmy pierwszy komputer, na którym piszę kod „PC1” (komputer osobisty 1), a drugi komputer, na którym buduję kod „PC2”. Potrzebuję narzędzia do łatwej synchronizacji z PC1 do PC2. Próbowałem rsync
, ale było to niesamowicie wolne dla dużych repozytoriów i wymagało ogromnej przepustowości i danych.
Jak mam to zrobić? Jakiego przepływu pracy powinienem użyć? Jeśli masz również to pytanie, oto przepływ pracy, który zdecydowałem. Napisałem skrypt bash, aby zautomatyzować proces za pomocą git
automatycznego wypychania zmian z PC1 na PC2 za pośrednictwem zdalnego repozytorium, takiego jak github. Jak dotąd działa bardzo dobrze i jestem z tego bardzo zadowolony. Jest o wiele znacznie szybszy niż rsync
, moim zdaniem bardziej godny zaufania, ponieważ każdy komputer utrzymuje funkcjonalne repozytorium git i zużywa znacznie mniejszą przepustowość do przeprowadzenia całej synchronizacji, dzięki czemu można to łatwo zrobić na hotspocie telefonu komórkowego bez użycia ton danych.
Ustawiać:
Zainstaluj skrypt na PC1 (to rozwiązanie zakłada, że ~ / bin znajduje się w zmiennej $ PATH):
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
Teraz edytuj plik „~ / .sync_git_repo”, który właśnie skopiowałeś powyżej, i zaktualizuj jego parametry, aby pasowały do Twojego przypadku. Oto parametry, które zawiera:
# 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 sklonuj swoje repozytorium, które chcesz zsynchronizować na PC1 i PC2.
- Upewnij się, że wszystkie klucze ssh są skonfigurowane tak, aby móc przesuwać i ciągnąć do zdalnego repozytorium z PC1 i PC2. Oto kilka przydatnych linków:
- 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
- Upewnij się, że wszystkie klucze ssh są skonfigurowane do ssh z PC1 na PC2.
Teraz cd
do dowolnego katalogu w repozytorium git na PC1 i uruchom:
sync_git_repo_from_pc1_to_pc2
Otóż to! Około 30 sekund później wszystko zostanie magicznie zsynchronizowane z PC1 na PC2 i będzie drukować cały czas, aby powiedzieć ci, co robi i gdzie robi to na dysku i na którym komputerze. Jest również bezpieczny, ponieważ nie zastępuje ani nie usuwa niczego, co nie jest zobowiązane. Zamiast tego najpierw tworzy kopię zapasową! Przeczytaj więcej poniżej, jak to działa.
Oto proces, którego używa ten skrypt (tj .: co faktycznie robi)
- Z PC1: Sprawdza, czy na PC1 są jakieś niezatwierdzone zmiany. Jeśli tak, zatwierdza je do tymczasowego zatwierdzenia w bieżącym oddziale. Następnie siła wypycha je do zdalnej gałęzi SYNC. Następnie odrzuci tymczasowe zatwierdzenie, które właśnie wykonał w lokalnym oddziale, a następnie przywraca lokalne repozytorium git dokładnie tak, jak było, umieszczając wszystkie pliki, które były wcześniej ustawione w czasie, gdy wywołałeś skrypt. Następnie jest to
rsync
kopia skryptu na PC2 i robissh
aby powiedzieć PC2, aby uruchomił skrypt ze specjalną opcją, aby po prostu zrobić rzeczy PC2.
- Oto, co robi PC2:
cd
przechodzi do repozytorium i sprawdza, czy istnieją jakieś lokalne niezatwierdzone zmiany. Jeśli tak, tworzy nową gałąź kopii zapasowej rozwidloną z bieżącej gałęzi (przykładowa nazwa: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- zauważ, że to RRRRMMDD-HHMMhrs - SSsec) i zatwierdza wszelkie niezatwierdzone zmiany w tej gałęzi za pomocą komunikatu zatwierdzenia, takiego jak DO zapasową wszystkich NIEZGODNE ZMIANY NA PC2 (DOCELOWY KOMPUTER / BUDOWANA MASZYNA). Teraz sprawdza gałąź SYNC, wyciągając ją ze zdalnego repozytorium, jeśli nie jest jeszcze na komputerze lokalnym. Następnie pobiera najnowsze zmiany w zdalnym repozytorium i wykonuje twardy reset, aby zmusić lokalne repozytorium SYNC do dopasowania do zdalnego repozytorium SYNC. Możesz to nazwać „mocnym pociągnięciem”. Jest to jednak bezpieczne, ponieważ utworzyliśmy już kopię zapasową wszelkich niezatwierdzonych zmian, które mieliśmy lokalnie na PC2, więc nic nie jest stracone!
- Otóż to! Teraz stworzyłeś idealną kopię z PC1 na PC2 bez konieczności zapewnienia czystych katalogów roboczych, ponieważ skrypt obsługiwał wszystkie automatyczne zatwierdzanie i inne rzeczy dla Ciebie! Jest szybki i działa bardzo dobrze na dużych repozytoriach. Teraz masz łatwy mechanizm do użycia dowolnego wybranego IDE na jednej maszynie podczas budowania lub testowania na innej maszynie, łatwo, za pośrednictwem hotspotu Wi-Fi z twojego telefonu komórkowego, jeśli to konieczne, nawet jeśli repozytorium ma kilkadziesiąt gigabajtów i masz czas i ograniczone zasoby.
Zasoby:
- Cały projekt: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Zobacz więcej linków i referencji w samym kodzie źródłowym w ramach tego projektu.
- Jak wykonać „hard pull”, jak to nazywam: Jak wymusić „git pull”, aby zastąpić lokalne pliki?
Związane z:
- synchronizacja repozytorium git między komputerami podczas przenoszenia?