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://user@example.com/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!

Odpowiedzi:


213

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

git remote update

@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" ... :-)


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:


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.