Jak mogę zsynchronizować widelec bez dodawania osobnego pilota?


302

Załóżmy, że someone/foobarna GitHub istnieje repozytorium , do którego rozwidliłem się me/foobar.

Jak pobrać nowe zatwierdzenia z repozytorium nadrzędnego bezpośrednio do mojego rozwidlenia , bez konieczności dodawania osobnego pilota i pamiętając, aby regularnie pobierać z tego miejsca ?

Celem jest:

  • git pull aby pobrać z repozytorium nadrzędnego
  • git push wysłać wszystko do mojego widelca

26
Zaskakująca odpowiedź @Olufemi wydaje się robić, co chcesz, z wyjątkiem tego, że jak zauważa ChristianGosch w komentarzu, kończy się na „gałęzi zatwierdzenia” na gałęzi i nie pojawia się „nic do porównania”. Wydaje się to niedopuszczalne w przypadku wielu projektów, dla których chcesz utworzyć gałęzie, które będą pobierane. Więc czy naprawdę nie ma sposobu, aby wykonać ten najbardziej podstawowy przepływ pracy współtwórcy w github bez uruchamiania tajemnych poleceń git na komputerze osobistym? A może powinienem po prostu wyrzucić całe moje repo i ponownie rozwidlić za każdym razem, gdy chcę wnieść swój wkład?
nealmcb




@nealmcb Czy nie można uniknąć problemu z „scalaniem zatwierdzenia” na szczycie oddziału, jeśli dokonasz zmiany bazy?
Marko

Odpowiedzi:


586

Otwórz rozwidlone repozytorium Git me / foobar .

Kliknij Porównaj :

Oto przykładowy obraz strony

Otrzymasz powiadomienie:

Nie ma nic do porównania.
ktoś: master jest na bieżąco ze wszystkimi zobowiązaniami ode mnie: master . Spróbuj zmienić bazę do porównania.

Kliknij na przełączanie bazy na tej stronie:

Oto przykład na stronie

Następnie zobaczysz wszystkie zobowiązania popełnione wobec kogoś / foobara po dniu, w którym je rozwidliłeś.

Kliknij Utwórz żądanie ściągnięcia :

Oto przykładowa strona

Nadaj żądaniu ściągnięcia tytuł, a może opis i kliknij Utwórz żądanie ściągnięcia .

Na następnej stronie przewiń w dół strony i kliknij opcję Połącz żądanie ściągnięcia i Potwierdź scalenie .

Twoje repozytorium Git ja / foobar zostanie zaktualizowane.

Edycja: opcje bazy są pokazane tutaj:

wprowadź opis zdjęcia tutaj


50
Jest to mylące, ponieważ po zmianie podstawowego github wrzuca cię na stronę oryginalnego repo, więc wygląda na to, że otwierasz żądanie ściągnięcia w górnym widelcu. Ale to całkowicie działa.
Eduardo,

8
Aby uniknąć powyższy dezorientacji wzmianki, że to lepiej kliknąć Editprzycisk i ręcznie przełączyć base forksię me/foobari head forkdo someone/foobar. W ten sposób jest to o wiele jasne
Macemers

26
Kolejny: Działa to dobrze, jeśli nie zrobiłeś tego wcześniej, ale później na historii historii zmian znajduje się „scalanie zatwierdzenia”. Dlatego „nic do porównania” nie pojawi się. Zamiast tego należy użyć przycisku „Edytuj” i ręcznie zmienić podstawę i widelec, aby to zadziałało.
Christian Gosch

26
Czy nie ma sposobu na pozbycie się tego absurdalnego zatwierdzenia scalenia?
kumarharsh

17
@kumar_harsh od września 2016 r. dostępna jest teraz opcja „rebase and merge” dla żądań ściągania, która pozwala uniknąć zatwierdzenia scalania.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

Jest jednak jedno zastrzeżenie:
jest to idealne rozwiązanie, jeśli tylko Ty wprowadzasz zmiany w widelcu.
Jeśli jednak jest udostępniany innym osobom, może być konieczne wyciągnięcie z widelca, w którym to przypadku oddzielny pilot jest jedynym rozwiązaniem.

Edycja:
W rzeczywistości możesz to zrobić git pull git@github.com:me/foobar , co usuwa zastrzeżenie.
Wybór należy do ciebie, co jest łatwiejsze do zapamiętania.


8

Użyłem dość prostej metody przy użyciu interfejsu internetowego GitHub, aby to zrobić:

  1. Otwórz oryginalne repozytorium Git (nie rozwidlone repozytorium Git me/foobar)
  2. Przejdź do folderu src i otwórz plik, który chcesz zmienić
  3. Kliknij ikonę pióra. Automatycznie utworzy etykietę w twoim osobistym rozwidleniu o nazwie „patch-1” na podstawie bieżącej wersji głównego repozytorium: Wpisz opis zdjęcia tutaj
  4. Cieszyć się! Wpisz opis zdjęcia tutaj

3
Próbując tego, w zasadzie otwiera edytor pliku w oryginalnym repozytorium git. Nie mam uprawnień do zapisu (zgodnie z projektem) do oryginalnego repozytorium git. Wydaje się, że dla tej metody musisz zmienić plik, w przeciwnym razie nie ma możliwości „zapisania” pliku. Bez zapisania pliku nie mogłem wyświetlić twojego odpowiednika gałęzi „patch-1” w moim rozwidlonym repozytorium. Czego tu brakuje?
Electro-Bunny

5

Aplikacja „Pull” to rozwiązanie do automatycznej konfiguracji i zapomnienia. Zsynchronizuje domyślną gałąź twojego widelca z repozytorium nadrzędnym.

Odwiedź adres URL, kliknij zielony przycisk „Zainstaluj” i wybierz repozytoria, w których chcesz włączyć automatyczną synchronizację.

Oddział jest aktualizowany raz na godzinę bezpośrednio na GitHub, na komputerze lokalnym musisz pobrać oddział główny, aby upewnić się, że twoja kopia lokalna jest zsynchronizowana.

Odpowiedział także w https://stackoverflow.com/a/58965171/946850 .


1

Inną opcją jest użycie Update from upstreamRepoName/masterprzycisku w GitHub na Maca (i zakładam, że GitHub na Windows).

Wpisz opis zdjęcia tutaj


TIL: że istnieją aplikacje dla GitHub poza interfejsem sieciowym :-) [szkoda, że ​​wrażenia nie są jednolite]
Tom Goodfellow

Nie widzę tego w systemie Windows
Denis

1
@Denis to ich stara aplikacja. Nie jestem pewien, czy ma je nowa aplikacja.
Steve Moser

Aha. Działa to w „GitHub Desktop” (w przypadku komputerów Mac, niepewny co do systemu Windows).
michaelok

0

Nie wiem, jak można to zrobić bez dodawania kolejnego pilota, jednak zawsze dodam repozytorium, z którego rozwidliłem się jako upstreampilot, aby móc po prostu zrobić:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Spowoduje to zsynchronizowanie wszystkich gałęzi, w tym. tworzenie nowych (usuń, refs/heads/aby zaktualizować tylko istniejące oddziały). Jeśli któryś z twoich oddziałów się rozdzielił, wygeneruje błąd dla tego oddziału.

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.