Git wyciąga z innego repozytorium

98

Mam repozytorium o nazwie Generic, które jest aplikacją ogólną. Rozwidliłem go do repozytorium o nazwie Acme, które po prostu opiera się na Genericrepozytorium przechowywanym w aplikacji i dodaje do niego markę Acme Co.

Jeśli wprowadzę zmiany w podstawowej funkcjonalności w Generic, chcę zaktualizować Acmerepozytorium o najnowsze zmiany, które wprowadziłem w podstawowej funkcjonalności w Generic. Jak miałbym to zrobić?

O ile wiem, zasadniczo próbuję scalić zmiany wprowadzone w repozytorium nadrzędnym w bieżącym rozwidleniu.

Jeśli to coś znaczy, próbuję to zrobić, ponieważ mam ogólną aplikację, na której następnie buduję i markę dla klientów indywidualnych (jak Acmew tym przykładzie). Jeśli można to zrobić w bardziej przejrzysty sposób, daj mi znać.

Libbux
źródło

Odpowiedzi:

140

Wydaj następujące polecenie w swoim Acmerepozytorium. Dodaje nowe zdalne repozytorium o nazwie upstreamwskazującej na Genericrepozytorium.

git remote add upstream https://location/of/generic.git

Następnie możesz scalić wszelkie zmiany wprowadzone Genericw bieżącej gałęzi Acmeza pomocą następującego polecenia:

git pull upstream

Jeśli chcesz po prostu pobrać zmiany bez automatycznego łączenia, użyj git fetchzamiast git pull.

Jeśli chcesz wyłączyć wypychanie do tego repozytorium, ustaw adres URL wypychania na nieprawidłowy adres URL, używając czegoś takiego jak

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git będzie teraz krzyczał na ciebie, że nie możesz znaleźć repozytorium, jeśli spróbujesz naciskać upstream(i przepraszam za Rickroll, ale to był pierwszy losowy ciąg, który pojawił się w mojej głowie).

McLovin
źródło
6
Wspaniale dzięki. Jeszcze jedno: czy istnieje sposób, aby ten zdalny odczyt był tylko do odczytu, aby nie przypadkowo go naciskać?
Libbux
1
Zacząłem odpowiadać, ale widzę, że McLovin już zredagował swoją odpowiedź, aby to uwzględnić.
Frankie Simon
4
Od wersji 2.9 git, będziesz musiał określić flagę --allow-unrelated-histories. Zobacz stackoverflow.com/a/37938036/3799847
sfinks_29
5
Musiałem wydaćgit pull --allow-unrelated-histories upstream master
Alec Jacobson
Próbowałem, ale git pull upstreampo prostu się zawiesza ... jakieś pomysły?
Paulo Carvalho
10

Aby pobrać konkretną gałąź z innego repozytorium, możesz użyć poniższego polecenia git.

git pull <git_url> <branch> --allow-unrelated-histories
vin
źródło