Можете ли вы нажать на все git пульты с одной командой?

Вместо этого:

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

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

Спасибо:)

Ответ 1

Чтобы переместить все ветки во все пульты дистанционного управления:

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 теперь будет толкать все ветки на все пульты.

Ответ 2

Создайте пульт 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

Ответ 3

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

[remote "origin"]
    url = https://[email protected]/path/to/repo1
    pushurl = https://[email protected]/path/to/repo1
    pushurl = https://[email protected]/path/to/repo2
    pushurl = https://[email protected]/path/to/repo3
    fetch = +refs/heads/*:refs/remotes/origin/*

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

$ git remote add origin https://[email protected]/path/to/repo1
$ git remote set-url --push --add origin https://[email protected]/path/to/repo1
$ git remote set-url --push --add origin https://[email protected]/path/to/repo2
$ git remote set-url --push --add origin https://[email protected]/path/to/repo3

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

[remote "specialRemote"]
    url = ssh://[email protected]:7999/yyy/repo1.git
    pushurl = ssh://[email protected]:7999/yyy/repo1.git
    pushurl = ssh://[email protected]: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.

Ответ 4

В качестве альтернативы 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. Вы только что сделали это с помощью командной строки вместо необработанного редактирования конфигурационного файла.

Ответ 5

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

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

function GitPush {
  [email protected]

  # 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

Ответ 6

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