Git pull из другого репозитория

98

У меня есть репозиторий Generic, который представляет собой универсальное приложение. Я вложил его в репозиторий с именем Acme, который просто основан на Genericрепозитории, хранящемся в приложении, и добавляет к нему брендинг Acme Co.

Если я внесу изменения в основные функции в Generic, я хочу обновить Acmeрепозиторий последними изменениями, которые я внес в основные функции в Generic. Как мне это сделать?

Насколько я могу судить, я по сути пытаюсь объединить изменения, сделанные в вышестоящем репозитории, в текущую вилку.

Если это что-то значит, я пытаюсь сделать это, потому что у меня есть общее приложение, которое я затем создаю и создаю для отдельных клиентов (как Acmeв этом примере). Если есть более чистый способ сделать это, дайте мне знать.

Libbux
источник

Ответы:

140

Выполните следующую команду в своем Acmeрепо. Он добавляет новый удаленный репозиторий с именем upstream, указывающим на Genericрепо.

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

Затем вы можете объединить любые изменения, внесенные Genericв текущую ветку, Acmeс помощью следующей команды:

git pull upstream

Если вы просто хотите, чтобы изменения загружались без автоматического объединения, используйте git fetchвместо git pull.

Если вы хотите отключить отправку в этот репозиторий, установите для URL-адреса push недопустимый URL-адрес, используя что-то вроде

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

Теперь Git будет кричать на вас о том, что вы не можете найти репо, если вы попытаетесь нажать upstream(и извиняюсь за Rickroll, но это была первая случайная строка, которая пришла мне в голову).

МакЛовин
источник
6
Отлично, спасибо. И еще одно: есть ли способ сделать этот удаленный доступ только для чтения, чтобы я случайно не нажал на него?
Libbux
1
Я начал отвечать, но вижу, что Макловин уже отредактировал свой ответ, включив это.
Фрэнки Саймон
4
Начиная с git 2.9, вам нужно будет указать флаг --allow-unrelated-histories. См stackoverflow.com/a/37938036/3799847
sfinks_29
5
Мне нужно было выпуститьgit pull --allow-unrelated-histories upstream master
Алек Джейкобсон
Я пробовал это, но git pull upstreamпросто зависает ... есть идеи?
Пауло Карвалью
11

Чтобы извлечь конкретную ветку из другого репо, вы можете использовать команду git ниже.

git pull <git_url> <branch> --allow-unrelated-histories
вин
источник