Jak zaktualizować klon git - lustro?

144

Utworzyłem repozytorium git, aby odzwierciedlić działającą witrynę (która jest repozytorium non-bare git):

git clone --mirror ssh://[email protected]/path/to/repo

Teraz, aby aktualizować ten klon lustrzany o wszystkie zmiany z jego zdalnego źródła, którego polecenia lub poleceń muszę użyć?

Chciałbym aktualizować wszystko: zatwierdzenia, odwołania, hooki, gałęzie itp.

Dzięki!

J. Bruni
źródło

Odpowiedzi:

213

Oto polecenie, które musisz wykonać na serwerze lustrzanym:

git remote update
ralphtheninja
źródło
@Magnus Skog: Świetnie. Dzięki! Czy to wszystko? Czy potrzebuję innego polecenia, na przykład git fetch? Czy git remote updatesam to wszystko zrobi?
J. Bruni
11
Chciałbym też wiedzieć, jaka jest różnica między pobieraniem git.
Thorbjørn Ravn Andersen
1
@ Thorbjörn (będziesz musiał zrobić ze szwedzkim ö :)): Pobieranie Git po prostu aktualizuje repozytorium zdalnymi referencjami z pilota. To polecenie aktualizuje wszystko w repozytorium lustrzanym.
ralphtheninja
4
Oto dobra odpowiedź, która wyjaśnia więcej: stackoverflow.com/questions/3959924/ ...
ralphtheninja
16
'git remote update --prune' zrobi to wszystko, ale usunie gałęzie, gdy zostaną usunięte z oryginalnego repozytorium.
teeks99
8

Jeśli chodzi o zatwierdzenia, odwołania, gałęzie i „ et cetera ”, odpowiedź Magnusa po prostu działa ( git remote update).

Ale niestety nie ma sposobu na clone/ lustro / update haczyki , tak jak chciałem ...

Znalazłem bardzo interesujący wątek na temat klonowania / tworzenia kopii lustrzanych haków:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Nauczyłem się:

  • Haczyki nie są uważane za część zawartości repozytorium.

  • Jest więcej danych, takich jak .git/descriptionfolder, który nie jest klonowany, podobnie jak haki.

  • Domyślne haki, które pojawiają się w katalogu, hookspochodzą z plikuTEMPLATE_DIR

  • Jest ta interesująca templatefunkcja w git.

Mogę więc albo zignorować to "klonowanie haków", albo obrać rsyncstrategię, biorąc pod uwagę cele mojego serwera lustrzanego (kopia zapasowa + źródło tylko dla innych klonów).

Cóż ... po prostu zapomnę o klonowaniu hooków i będę się trzymał git remote updatedrogi.

  • Sehe właśnie wskazał, że nie tylko "haczyki" nie są zarządzane przez clone/ updateproces, ale także skrytki, rerere, itp ... Tak więc, dla ścisłej kopii zapasowej rsynclub równoważnej byłoby naprawdę dobrym rozwiązaniem. Ponieważ w moim przypadku nie jest to konieczne (stać mnie na brak haków, skrytek itp.), Tak jak mówiłem, będę się trzymał remote update.

Dzięki! Poprawiłem trochę moje własne "git-fu" ... :-)

J. Bruni
źródło
5

Zobacz tutaj: Git nie klonuje wszystkich gałęzi na kolejnych klonach?

Jeśli naprawdę chcesz tego pociągając za gałęzie zamiast za push --mirror, możesz zajrzeć tutaj:

"fetch --all" w repozytorium git bare nie synchronizuje lokalnych oddziałów ze zdalnymi

Ta odpowiedź zawiera szczegółowe kroki, jak to osiągnąć w stosunkowo łatwy sposób:

sehe
źródło
1
pushnie jest dla mnie opcją, ponieważ muszę to zrobić po stronie odbiorczej (skąd jest klon); pullnie jest również opcją, ponieważ repozytorium lustrzane jest czystym repozytorium (brak działającego drzewa, a więc bez "ściągania") - wydaje się, że git remote updaterzeczywiście to wszystko (znacznie łatwiejsze niż podana odpowiedź) ... W każdym razie, dzięki! Z pewnością w powiązanych pytaniach / odpowiedziach znajdują się cenne informacje.
J. Bruni
1
ok, miałem na myśli ciągnięcie jak w zwykłym żargonie. Technologia push and pull. Nie ma innego słowa poza bezsensownym „pobieraj dane z pilota aktywnie na kliencie”, które nie zastąpiłoby słowa mającego znaczenie dla systemów git lub DVCS :) Drugie łącze dostarczy żądanych informacji. Uwaga, że „git zdalnej aktualizacji” ma nie w rzeczywistości utrzymać status „lustrzane” bez dodatkowych operacji wymienionych tam
sehe
1
hmm ... przepraszam (HTH) - wydaje się, że "absolutny" serwer lustrzany jest łatwiejszy do osiągnięcia poprzez prostą "rsync" oryginalnego folderu repozytorium ... nie to, co chciałem, ale ... właśnie zrobiłem kilka testów ... i nic nie wydaje się kopiować haczyków - co mnie szczególnie interesuje ...
J. Bruni
1
FYI, cele tego serwera lustrzanego są następujące, tylko: 1) pełna kopia zapasowa, z której mogę przywrócić, jeśli dane na pierwotnym serwerze repo zostaną utracone; 2) gdzieś, skąd inni mogą sklonować i uzyskać lokalne działające repozytorium, bez dostępu do oryginalnego repozytorium źródła
J. Bruni
1
Jeśli chcesz haczyki i wszystko inne, gitoza może (nie pamiętam dobrze) mieć to, czego potrzebujesz, ale rsyncw takim przypadku postąpiłbym . Zakładam też, że zapominasz o skrytkach (patrz tutaj ) i ponownie przesyłasz informacje ...?
sehe