Utrzymywanie synchronizacji repozytoriów git na różnych hostach

34

Zastanawiam się nad uruchomieniem małego projektu i chcę, aby jego wersjonowanie odbywało się za pomocą git.

Bitbucket wydaje mi się dobrą opcją z ich darmowym planem. Chcę go używać jako głównego narzędzia do pracy z git, ponieważ mają ładne narzędzia, takie jak interfejs WWW, klient Mac OS i tak dalej. Ale w celu zapewnienia lepszej ochrony przed przypadkowymi uszkodzeniami, które mogą być spowodowane korzystaniem z usług stron trzecich, chcę również zainstalować git na moim NAS jako drugą kopię zapasową repozytorium.

Teraz mam pytanie, czy można utworzyć repozytorium na dwóch różnych hostach, a następnie je zsynchronizować? Załóżmy na przykład, że raz w tygodniu aktualizuję repozytorium na moim serwerze NAS, aby pasowało do tego na Bitbucket. Następnie, na wypadek, gdyby coś się stało z Bitbucket, nadal będę mieć pełne repozytorium z pełną historią rozwoju na mojej lokalnej pamięci NAS.

Czy istnieje sposób na zaimportowanie istniejącego repozytorium z pełną historią do innej usługi git?


Myślę, że lustro jest tym, czego potrzebuję. Ten artykuł wydaje się dokładnie opisywać to, czego potrzebuję. I ten jeden , jak również.

Wierzę, że zrobi pełną kopię z pełną historią, a nawet automatycznie zatwierdzi nowe wersje do repozytoriów na obu hostach automatycznie.

Czy mam rację?

BartoNaz
źródło
używam xpdev. Zastanawiam się w twojej sytuacji 2 systemu, jaki byłby bennefit w twoim przypadku. dla pewności z każdej ostatecznej wersji tworzę kopię zapasową USB. Ale zasadniczo wersjonowanie jest obsługiwane przez whitin xpdev, więc nie jest to prawdziwe wymaganie. BTW, jeśli posiadasz głupi dowód NASS Raid1 lub coś takiego, możesz rozważyć uruchomienie własnych systemów wersjonowania, są też pewne freeone
user613326 20.04.2013
Ale chcę mieć pełną wersję dostępną w 2 miejscach. Jeśli hosting strony trzeciej umrze lub firma, która go uruchomi, po prostu zniknie, chcę mieć dokładnie to samo doświadczenie z całą historią wersji ...
BartoNaz
Oznacza to, że będę mieć Bitbucket dla wygody i git na NAS dla 99,9% bezpieczeństwa.
BartoNaz,
Co do xp-dev, jest mało prawdopodobne, że taka firma umrze, mogą zmienić plany hostingu kodu, ceny itp. Lub połączyć się z inną firmą. Ale to dla nich pieniądz mleczny. Będą również tworzyć kopie zapasowe cennych danych. Ich zadaniem jest pozostać na miejscu. Używam go z 3 programistami, a nasz kod istnieje na 5 różnych komputerach, na których zawsze jest lokalna kopia źródłowa, która jest synchronizowana w xp dev. XP dev jest bezpłatny, jeśli masz tylko kilka projektów.
user613326 21.04.13
1
Oczywiście to mało prawdopodobne. Ale nadal nie możesz być w 100% pewien ...
BartoNaz

Odpowiedzi:

19

Tak, to właśnie piękno DVCS, takiego jak git. Możesz użyć dowolnej liczby różnych repozytoriów w tym samym stanie, co bitbucket lub github.

Nawet ty kopia lokalna (repozytorium na twoim komputerze) jest zwykle pełnym klonem zdalnego repozytorium.

Jedyne, co musisz zrobić, aby zsynchronizować wiele repozytoriów, to pobranie jednego (zwykle nazywanego początkiem lub wcześniejszym) i wypchnięcie do kopii zapasowych.

Wilbert
źródło
11
Niestety nie wszystko jest tak błyszczące. Zobacz ostrożne podejście do katastrofy KDE . Oznacza to, że kopia zapasowa nie usuwa rzeczy (oddziałów, repozytoriów itp.), Które zostały usunięte na serwerze kopii zapasowej.
Jan Hudec,
Nadal nie jestem pewien, czy dobrze to rozumiem. O ile rozumiem, pchanie i ciągnięcie działa z pewną wersją. Ale powiedzmy, że mam najnowszą wersję kodu na mojej działającej maszynie. Mam repozytorium git na zdalnym hoście (Bitbucket, Github lub cokolwiek innego), które ma pełną historię rozwoju kodu do najnowszej wersji, którą mam na działającym komputerze (jeśli został zatwierdzony). Mam repozytorium na serwerze NAS, które jest puste. Czy mogę zaimportować pełną historię kodu ze zdalnego hosta na mój NAS, aby mieć dwa identyczne repozytoria w dwóch miejscach i jak?
BartoNaz,
2
Sklonuj zdalne repozytorium, a następnie w regularnych odstępach czasu ściągaj do niego wszystkie aktualizacje (wszystkie gałęzie). Klon git zawiera historię, to nie jest jak svn kasa, która ma tylko najnowszą wersję.
Wilbert
11

Oto sprawdzone rozwiązanie problemu: Automatyczne synchronizowanie 2 zdalnych repozytoriów Git

Prosty skrypt do synchronizacji 2 zdalnych repozytoriów Git

Szukałem w Internecie prostego skryptu, który można zsynchronizować. 2 zdalne repozytoria, ale nie mogłem znaleźć takiego skryptu, nawet jeśli wielu go szuka! Stworzyłem więc 2 proste repozytoria testowe i zacząłem testować i budować taki skrypt.

Co taki skrypt powinien zrobić?

Ogólnie rzecz biorąc, kroki do wykonania tego są proste: 1. Sklonuj pierwsze repozytorium 1. Dodaj drugie jako dodatkowe zdalne repozytorium 1. pobierz wszystko, co jest w drugim repozytorium 1. wepchnij zaktualizowane repozytorium lokalne na 2 zdalne repozytoria.

Pozostaje problem - jakie są prawidłowe przełączniki dla wszystkich powyższych poleceń git?

Oto jest ...

Skrypt gisp 2repos-sync.sh

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

UWAGA - ten skrypt nie rozwiązuje przypadków konfliktów między zawartością repozytorium!

yorammi
źródło
W swojej odpowiedzi możesz wspomnieć, że pierwszą rzeczą, którą robisz, jest usunięcie istniejącego katalogu lokalnego za pomocą $ REPO_NAME. Wydaje się to ważne i może zapobiec utracie danych przez osoby, które po prostu kopiują twoje rozwiązanie.
Wilbert,
Aby tego dokonać , LibGit2 jest przydatny w tego typu sprawach .
RubberDuck,
0

Używam prywatnego GitLab do przechowywania wszystkich moich repozytoriów, więc mam tylko jedno źródło, z którego pcham i wyciągam podczas codziennego programowania.

Ale w przypadku projektów open source GitHub jest znacznie bardziej dynamiczną społecznością, więc jeśli chcę zaakceptować wkład społeczności do moich projektów, używam internetowego systemu zaczepów GitLab do pingowania uruchomionego serwera, który następnie aktualizuje moje publiczne repozytoria w GitHub.

To pozwala mi traktować GitHub jako kolejnego pilota, z którego mogę wyciągać, gdy ktoś wnosi wkład - a następnie scalam - nie-lokalnie, i istnieje przepływ, w jaki sposób wszystkie moje podstawowe i publiczne repozytoria rozpowszechniają zmiany.

diffalot
źródło