Другой удаленный по умолчанию (отслеживание ветвь) для git pull и git push - PullRequest
57 голосов
/ 27 мая 2010

Есть ли способ настроить git-репозиторий, чтобы git pull по умолчанию был одним пультом, а git push - другим? Я знаю, что могу установить оба , изменив значение переменной remote в разделе ветви .git/config, но как это сделать для каждого направления отдельно?

Ответы [ 5 ]

83 голосов
/ 29 июля 2013

Начиная с Git версии 1.7.0, вы можете установить это с помощью:

git remote set-url --push origin https://your.push.com/blah/
26 голосов
/ 27 мая 2010

Для Git 1.6.4 и выше, установите remote.<name>.pushurl с git config .

Можно использовать это для извлечения с использованием протокола https: только для чтения и проталкивания с использованием протокола на основе ssh.


Скажите, что URL origin (remote.origin.url) равен https://git.example.com/some/repo.git. Он доступен только для чтения, но у вас есть доступ для записи через ssh на основе URL-адреса git@git.example.com:some/repo.git. Выполните следующую команду, чтобы выполнить проталкивание по протоколу на основе ssh:

git config remote.origin.pushurl git@git.example.com:some/repo.git
20 голосов
/ 27 мая 2015

Начиная с Git 1.8.3, вы можете использовать опцию remote.pushDefault, чтобы делать именно то, что вам нужно (т. Е. Иметь разные пульты по умолчанию для pull и push). Вы можете установить опцию, как и любой другой; например, чтобы установить его на пульте pushTarget, используйте

git config remote.pushDefault pushTarget

Эта опция будет иметь следующий эффект:

  • git pull будет извлекать данные с пульта, указанного параметром remote в соответствующем разделе ветви в .git/config, тогда как
  • git push переведет на пульт, указанный remote.pushDefault.

Обратите внимание, что вам нужно указать имя пульта, а не URL. Это делает это решение более гибким, чем решение, включающее remote.<name>.pushurl, потому что (например) у вас все равно будут отслеживаться ветви для обоих пультов. Нужна ли вам эта гибкость или хотите, зависит от вас.

В примечаниях к выпуску говорится, что эта опция была добавлена ​​специально для поддержки треугольных рабочих процессов.

4 голосов
/ 27 мая 2010

Из того, что я могу получить из справочной страницы git config , репозиторий восходящего направления:

  • по умолчанию происхождение
  • установлено branch.remote
  • всегда для git pull/fetch и git pull

Для данной ветви я не вижу способа иметь два отдельных удаленных по умолчанию .

2 голосов
/ 17 апреля 2014

user392887 ответ в основном правильно, но:

  1. Вы должны предпочесть использовать SSH. Согласно GitHub, «мы настоятельно рекомендуем использовать SSH-соединение при взаимодействии с GitHub. SSH-ключи - это способ идентификации доверенных компьютеров без использования паролей».

  2. Любой, кто использует RHEL / CentOS 6, будет использовать git 1.7.1 по умолчанию, который поддерживает set-url.

Итак, предпочтительное решение для git 1.7.1. и позже:

git remote set-url --push origin git@github.com:username/somerepo.git
...