Właśnie zacząłem używać git i jestem pod wrażeniem różnic w przepływie pracy od SVN, ale natknąłem się na jedno pytanie dotyczące struktury/konfiguracji, którego dokumentacja nie wydaje się intuicyjnie wyjaśniać, jak skonfigurować, a ja zastanawiasz się, czy to nawet możliwe.Konfiguracja repozytorium Git dla rozwoju z dwóch maszyn?
Moja konfiguracja polega na tym, że mam kilka komputerów, na których pracuję (na komputerze stacjonarnym i laptopie), więc aby łatwiej było zsynchronizować i utworzyć kopię zapasową repozytorium git, skonfigurowałem "publiczne" nagie repozytorium w moim domu Serwer Linux, do którego mogę się dostać zarówno z komputera stacjonarnego, jak iz laptopa. Nie jest to tak naprawdę publiczne, ponieważ wymaga dostępu do skrzynki SSH.
Mój problem pojawia się, gdy robię zmian na pulpicie, mogę łatwo pchnąć zmiany do repozytorium serwera (mam zestaw mirror
flagę origin
zdalny na tym repozytorium), a przy użyciu gitx
widzę, że lokalne i zdalne stany wyglądają identycznie, a każde moje indywidualne zatwierdzenie zostało zarejestrowane na serwerze.
Pytanie pojawia się, kiedy przełączam się na mój laptop, którego używam dość rzadko, repozytorium git prawdopodobnie zawiera kilka zmian za wersją serwera i wymaga aktualizacji. Zacząłem używać git pull
, aby uzyskać te zmiany lokalne, ale zamiast powielać wszystkie indywidualne zatwierdzenia na serwerze do lokalnego repozytorium, dodaje ono jeden nowy commit "merge" do lokalnego repozytorium, a gitx
pokazuje łączenie w oddziale zdalnego repozytorium. punkt.
Czy istnieje polecenie/przepływ pracy, który pozwoliłby mi zaktualizować lokalne repozytorium do dokładnego stanu zdalnego repozytorium (tak, że jeśli zrobię git push --mirror
żadne dane nie zostaną utracone)? Czy za każdym razem będę musiał usunąć moje lokalne repozytorium i ponownie za każdym razem je odzyskać?
Obecnie nikt inny nie będzie potrzebował dostępu do tego repozytorium, choć w przyszłości może stać się publicznym repozytorium, z którego użytkownicy będą mogli pobierać, więc odpowiedzi, które nie niszczą tej możliwości, zostaną docenione.
Edytuj: Moje zatwierdzenia zawierają odnawianie gałęzi z gałęzi głównej; czy to może wywołać komendę git pull
, aby pokazać ją jako scaloną? Czy potrzebuję wtedy flagi --rebase
?
Rozwiązanie Objaśnienie: Okazuje się, zrobiłem następujące czynności, aby skonfigurować repozytoria:
- Użycie laptopa do zainicjowania repozytorium git
- push laptop repozytorium do serwera (popełnić )
- Dokonano zmiany i zatwierdzono na laptopie (laptop w zobowiązaniu B)
- Pulpit repozytorium serwer klony (popełnić )
- Dokonaj zmian na pulpicie i commit (popełnia C, D, E, w tym oddziałów podścielanie)
- Pulpit popycha do serwera (serwer szybko- przekazuje do E)
- Kiedy laptop pobiera z serwera powoduje scalenia (od B nie może szybko naprzód do E).
- Laptop łączy się i przesuwa zmiany na serwerze.
- Pulpit teraz również musi się połączyć.
Z tego powodu jedno dodatkowe zobowiązanie, które było niezamierzonym błędem, sprawiło, że pomyślałem, że zawsze będzie to połączenie. Na sugestię Xentac za wróciłem i znalazłem na laptopie, że uczynił scalanie, że nie został wciśnięty do serwera, który był sprawcą, a raz mam wszystkie trzy naprawdę zsynchronizowane, git pull --ff
(zmuszając tylko scala fast-forward) działa dobrze i ostrzega mnie, jeśli coś nie jest zsynchronizowane przed wykonaniem scalenia.