Вместо этого:
git push origin --all && git push nodester --all && git push duostack --all
Есть ли способ сделать это с помощью только одной команды?
Спасибо:)
Вместо этого:
git push origin --all && git push nodester --all && git push duostack --all
Есть ли способ сделать это с помощью только одной команды?
Спасибо:)
git remote | xargs -L1 git push --all
Замените master
веткой, которую вы хотите нажать.
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
Запуск git pushall
теперь будет толкать все ветки на все пульты.
Создайте пульт 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
Если вы хотите всегда нажимать на 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.
В качестве альтернативы 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. Вы только что сделали это с помощью командной строки вместо необработанного редактирования конфигурационного файла.
Я написал короткую функцию 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
Вы можете использовать git hooks - особенно pre-push
: добавьте не-исходные толчки в .git/hooks/pre-push
.