2010-01-29 8 views
5

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.

Odpowiedz

4

Ponieważ masz rewizje w gałęzi master Twojego laptopa, które nie są w głównej gałęzi Twojego serwera, za każdym razem zmienia serwer, laptop może nie tylko aktualizować wskaźnik gałęzi master. Właśnie dlatego tworzysz commge commits.

Jeśli chcesz kontynuować wprowadzanie zmian, które nie są przechowywane na serwerze, ale są przechowywane na laptopie, zechcesz git fetch, a następnie git rebase origin/master. Pobieranie pobierze zatwierdzenia z serwera, ale nie zmieni lokalnych oddziałów, a rebase odtworzyć zmiany gałęzi głównej laptopa na szczycie głównego oddziału serwera (origin/master).

Byłoby zapewne lepiej byłoby nie mieć te commity zwisające wokół chociaż. Czy nie można ich zintegrować z całym kodem źródłowym, aby mieć jedną wspólną historię?

1

miałem zamiar zaproponować z flagą --ff, ale strona mężczyzna mówi, że jest to zachowanie domyślne. Możesz spróbować git pull --ff i sprawdzić, czy to robi różnicę.

Jeśli otrzymujesz scalanie popełnić, byłoby sugerować, że masz rewizje na komputerze przenośnym, które nie znajdują się na serwerze.

Czy Twój laptop skonfigurować jako lustro serwera, jak Twój pulpit jest?

Powiązane problemy