Очень хорошее и простое решение. Кстати, вы можете использовать xargs -l вместо -L 1, опция -l такая же, как -L 1. Кроме того, иногда я добавляю --all к git push. Git Remote | xargs -l git push --all
Git позволяет вам сделать этот вызов в пользовательской команде. Просто поместите его в файл, который 1) находится на вашем пути, 2) у вас есть права на выполнение и 3) он называется «git- [custom name]» (например, git-foo, git-push-all), и вы уметь просто набирать «git [custom name]» (например, git foo, git push-all).
Эндрю Мартин
2
@Tony В Ubuntu man xargsговорит , что опция -lустарела, так как ее нет в спецификации POISX.
wjandrea
2
@kyb В синтаксисе псевдонима git !означает, что ниже приведена не внутренняя команда git, а команда внешней оболочки.
слабое
286
Создайте 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 fetch --allсразу после такого толчка.
безумный
8
Г-н Торвальдс (создатель Git) упоминает, что он использует этот метод, но утверждает, что он используется только для удобства и не предлагает никаких технических преимуществ. Marc.info/?l=git&m=116231242118202&w=2 "И, в конце концов, даже" git push all, «который выдвигает несколько репозиториев, на самом деле заканчивает тем, что подключается по одному разу для каждого репозитория, так что на самом деле это просто сокращение для выполнения нескольких« git push ». Никакого реального технического преимущества, просто удобство».
Мэтт
14
Одна из проблем этого подхода заключается в том, что вам нужно добавлять новые URL-адреса к allудаленному, когда они становятся доступными, тогда как git remote | xargs -L1 git push --allавтоматически будут подбираться все новые удаленные.
Раффи Хачадурян
2
Подсказка: чтобы вам не нужно было печатать allкаждый раз, когда вы отправляете коммит, просто используйте «origin» вместо «all»:git remote set-url --add origin nodester-host:path/proj.git
Macabeus
забыл установить push-адреса, иначе git pushне обновит все URL-адреса. ответ обновлен соответственно
user3338098
88
Если вы хотите всегда нажимать на repo1, repo2 и repo3, но всегда извлекаете только из repo1, установите удаленный источник в качестве
Я написал короткую функцию 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
all
пульт, на котором можно установить все пульты, см .: stackoverflow.com/a/18637593/802365Ответы:
Чтобы передать все ветви на все пульты:
Или, если вы хотите отправить определенную ветку на все пульты:
Замените
master
веткой, которую вы хотите нажать.(Бонус) Чтобы создать псевдоним для команды:
Запуск
git pushall
теперь выдвинет все ветви на все пульты.источник
xargs: illegal option -- l
на OSX.git remote | xargs -L1 git push
man xargs
говорит , что опция-l
устарела, так как ее нет в спецификации POISX.!
означает, что ниже приведена не внутренняя команда git, а команда внешней оболочки.Создайте
all
пульт с несколькими URL репо на его имя:Тогда просто
git push all --all
.Вот как это выглядит в
.git/config
:источник
git fetch --all
сразу после такого толчка.all
удаленному, когда они становятся доступными, тогда какgit remote | xargs -L1 git push --all
автоматически будут подбираться все новые удаленные.all
каждый раз, когда вы отправляете коммит, просто используйте «origin» вместо «all»:git remote set-url --add origin nodester-host:path/proj.git
git push
не обновит все URL-адреса. ответ обновлен соответственноЕсли вы хотите всегда нажимать на repo1, repo2 и repo3, но всегда извлекаете только из repo1, установите удаленный источник в качестве
Настройте в командной строке:
Если вы хотите только вытащить,
repo1
но нажать наrepo1
иrepo2
для конкретной ветвиspecialBranch
:См. Https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
источник
git push
без аргументов.В качестве альтернативы CLI для редактирования файла .git / config вы можете использовать следующие команды:
То же самое
git push all --all
работает и здесь.Вы сделали то же самое, что и ответ № 1. Вы только что сделали это с помощью командной строки вместо простого редактирования файла конфигурации.
источник
Я написал короткую функцию bash для одновременного вызова множества пультов. Вы можете указать один пульт в качестве параметра, несколько пультов, разделенных пробелами, или не указывать их, чтобы они передавались на все пульты.
Это может быть добавлено в ваш .bashrc или .bash_profile.
Пример: допустим, в вашем репо 3 пульта: rem1, rem2 и rem3.
источник
Вы можете использовать git-хуки - особенно
pre-push
: добавьте неоригинальные толчки к.git/hooks/pre-push
.источник