Технически не с буквальным одиночным git push
, но вы можете эффективно достичь желаемого точного поведения с локальным (только проект, иначе не --global
) псевдоним git .
Отредактируйте файл .git/config
в каталоге вашего проекта.Лучше всего редактировать файл напрямую, а не запускать git config ...
из терминала, чтобы избежать проблем с цитированием / экранированием.Добавьте это в конец:
[alias]
pushall = "!git push a staging:master; git push b staging"
(pushall
может быть любым, если вы не используете команду по умолчанию git
.)
!
означает запускэто из оболочки (например, набрав его в терминал).Эта команда говорит: «Передайте локальную промежуточную ветвь на ведущую на удаленном сервере a и добавьте локальную промежуточную ветвь на удаленной стороне b, только .
Чтобы проверить, у нас есть два пульта с главной веткой ипромежуточная ветвь:
I] sean at goz in ~/d/stack (staging|✔)
> git remote -v
a git@github.com:sh78/stack.git (fetch)
a git@github.com:sh78/stack.git (push)
b git@bitbucket.org:musophob/stack.git (fetch)
b git@bitbucket.org:musophob/stack.git (push)
Теперь мы вносим некоторые изменения и фиксируем:
[I] sean at goz in ~/d/stack (staging|✔)
> touch afile
[I] sean at goz in ~/d/stack (staging|…1)
? (0) git add afile
[I] sean at goz in ~/d/stack (staging|●1)
> git commit -m "test"
[staging 64e5ee6] test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 afile
Теперь мы используем наш локальный псевдоним:
[I] sean at goz in ~/d/stack (staging↑1|✔)
> git pushall
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 269 bytes | 89.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To github.com:sh78/stack.git
bb8587b..64e5ee6 staging -> master
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 269 bytes | 269.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
remote:
remote: Create pull request for staging:
remote: https://bitbucket.org/musophob/stack/pull-requests/new?source=staging&t=1
remote:
To bitbucket.org:musophob/stack.git
1e5a81a..64e5ee6 staging -> staging
В результате нашcommit с afile
передается в главную ветвь удаленного a
(не промежуточная) и одновременно передается в промежуточную ветвь удаленного b
(не ведущую). Я подтвердил это на живых удаленных устройствах с помощью GitHub (™ Microsoft Corporation)и BitBucket.