Ответ 1
В последних версиях Git вы можете добавить несколько pushurl
для данного пульта. Используйте следующее, чтобы добавить два pushurl
к вашему origin
:
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
Поэтому, когда вы нажимаете на origin
, он будет нажимать на оба репозитория.
UPDATE 1: Git 1.8.0.1 и 1.8.1 (и, возможно, другие версии), похоже, имеют ошибку, которая заставляет --add
заменить исходный URL-адрес в первый раз вы используете его, поэтому вам нужно повторно добавить исходный URL-адрес, используя ту же команду. Выполнение git remote -v
должно показывать текущие URL-адреса для каждого пульта.
ОБНОВЛЕНИЕ 2: Юнио С. Хамано, сопровождающий Git, объяснил, как он был разработан. Выполнение git remote set-url --add --push <remote_name> <url>
добавляет pushurl
для данного пульта, который переопределяет URL-адрес по умолчанию для push. Тем не менее, вы можете добавить несколько pushurl
для данного пульта дистанционного управления, который затем позволяет вам нажимать на несколько пультов, используя один git push
. Вы можете проверить это поведение ниже:
$ git clone git://original/repo.git
$ git remote -v
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.'
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
Теперь, если вы хотите нажать на два или более репозитория, используя одну команду, вы можете создать новый удаленный файл с именем all
(как предложено @Adam Nelson в комментариях) или продолжайте использовать origin
, хотя последнее имя для этой цели менее наглядно. Если вы все еще хотите использовать origin
, пропустите следующий шаг и используйте origin
вместо all
во всех остальных шагах.
Итак, добавьте новый удаленный вызов all
, который мы будем ссылаться позже при нажатии на несколько репозиториев:
$ git remote add all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch) <-- ADDED
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git <-- ADDED
remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED
Затем добавьте pushurl
в удаленный тэг all
, указав на другой репозиторий:
$ git remote set-url --add --push all git://another/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push) <-- CHANGED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git <-- ADDED
Здесь git remote -v
отображается новый pushurl
для push, поэтому, если вы выполняете git push all master
, он будет только нажимать ветвь master
на git://another/repo.git
. Это показывает, как pushurl
переопределяет URL-адрес по умолчанию (remote.all.url).
Теперь добавьте еще один pushurl
, указывающий на исходный репозиторий:
$ git remote set-url --add --push all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push)
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep '^remote\.all'
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git
remote.all.pushurl=git://original/repo.git <-- ADDED
Вы видите, что добавленные нами pushurl
сохранены. Теперь один git push all master
переместит ветвь master
на git://another/repo.git
и git://original/repo.git
.