Умеет нажать на все пульты Git одной командой? - PullRequest
162 голосов
/ 26 апреля 2011

Вместо того, чтобы делать:

git push origin --all && git push nodester --all && git push duostack --all

Есть ли способ сделать это с помощью одной команды?

Спасибо:)

Ответы [ 6 ]

260 голосов
/ 26 апреля 2011

Создайте пульт дистанционного управления all с несколькими URL-адресами репо к его имени:

git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git

Тогда просто git push all --all.


Вот как это выглядит в .git/config:

  [remote "all"]
  url = origin-host:path/proj.git
  url = nodester-host:path/proj.git
  url = duostack-host:path/proj.git
192 голосов
/ 07 сентября 2013

Чтобы передать все ветви на все пульты:

git remote | xargs -L1 git push --all

Или, если вы хотите передать определенную ветку на все пульты:

Замените master на ветку, которую вы хотите отправить.

git remote | xargs -L1 -I R git push R master

(Бонус) Чтобы создать псевдоним git для команды:

git config --global alias.pushall '!git remote | xargs -L1 git push --all'

Запуск git pushall теперь будет передавать все ветви на все пульты.

63 голосов
/ 15 июля 2015

Если вы хотите всегда нажимать на repo1, repo2 и repo3, но всегда извлекать только из repo1, настройте удаленный источник в качестве

[remote "origin"]
    url = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo2
    pushurl = https://exampleuser@example.com/path/to/repo3
    fetch = +refs/heads/*:refs/remotes/origin/*

Настройка в командной строке:

$ git remote add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo2
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo3

Если вы только хотите получить от repo1, но нажать на repo1 и repo2 для конкретной ветви specialBranch:

[remote "origin"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[remote "specialRemote"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[branch "specialBranch"]
    remote = origin
    pushRemote = specialRemote
    ...

См. https://git -scm.com / docs / git-config # git-config-branchltnamegtremote .

17 голосов
/ 27 октября 2012

В качестве альтернативы CLI для редактирования файла .git / config вы можете использовать следующие команды:

# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git

То же самое git push all --all работает и здесь.

Вы выполнили то же, что и ответ № 1. Вы только что сделали это с помощью командной строки вместо простого редактирования файла конфигурации.

2 голосов
/ 24 января 2013

Я написал короткую функцию bash для отправки на множество пультов одним вызовом. Вы можете указать один пульт в качестве параметра, несколько пультов, разделенных пробелами, или не указывать их, чтобы они передавались на все пульты.

Это можно добавить к вашему .bashrc или .bash_profile.

function GitPush {
  REMOTES=$@

  # If no remotes were passed in, push to all remotes.
  if [[ -z "$REMOTES" ]]; then
    REM=`git remote`

    # Break the remotes into an array
    REMOTES=$(echo $REM | tr " " "\n")
  fi

  # Iterate through the array, pushing to each remote
  for R in $REMOTES; do
    echo "Pushing to $R..."
    git push $R
  done
}

Пример. Допустим, в вашем репо 3 пульта: rem1, rem2 и rem3.

# Pushes to rem1
GitPush rem1

# Pushes to rem1 and rem2
GitPush rem1 rem2

# Pushes to rem1, rem2 and rem3
GitPush
0 голосов
/ 02 августа 2018

Вы можете использовать git hooks - особенно pre-push: добавить толчки не-источника к .git/hooks/pre-push.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...