Коротко: есть ли способ заставить git-репо выдвигать и извлекать из списка удаленных репо (а не один «источник»)?
Длинное: у меня часто бывает ситуация, когда я разрабатываю приложение на нескольких компьютерах с разным подключением - скажем, ноутбук в пути, компьютер «А», когда я нахожусь в определенном месте, и другой компьютер «Б» пока по другому. Кроме того, ноутбук может иметь связь только с «A» или «B», а иногда и с обоими.
Я хотел бы, чтобы git всегда «извлекал» и «давил» на все компьютеры, к которым он в данный момент подключен, чтобы легче было переходить с одной машины на другую и продолжать бесперебойную работу.
git
функциями, включен в ответ Мальвинуса ниже . Принятый ответ неверен.Ответы:
Вы можете настроить несколько удаленных репозиториев с помощью
git remote
команды:Чтобы получить данные из всех настроенных удаленных устройств и обновить ветви отслеживания, но не объединять их
HEAD
, выполните:Если в данный момент он не подключен к одному из пультов, он возьмет тайм-аут или выдаст ошибку и перейдет к следующему. Вам придется вручную объединять выбранные репозитории или
cherry-pick
, в зависимости от того, как вы хотите организовать сбор изменений.Чтобы получить ветку master из alt и вставить ее в вашу текущую голову, выполните:
Так что на самом деле
git pull
это почти сокращениеgit pull origin HEAD
(на самом деле это выглядит в файле конфигурации, чтобы определить это, но вы поняли идею).Для отправки обновлений вы должны сделать это для каждого репо вручную.
Я думаю, что push был разработан с учетом рабочего процесса с центральным хранилищем.
источник
Делать это вручную больше не нужно , с современными версиями
git
! См. Решение Malvineous ниже.Воспроизводится здесь:
Оригинальный ответ:
Это то, что я использовал в течение долгого времени без плохих последствий и предложено Линусом Торвальдсом в списке рассылки git .
Решение araqnid - это подходящее решение для переноса кода в ваш репозиторий ... но когда у вас, как и у меня, есть несколько эквивалентных авторитетных апстримов (я держу некоторые из моих более важных проектов, клонированных как в частный апстрим, GitHub, так и в Codaset), оно может быть боль подталкивать изменения к каждому, каждый день.
Короче говоря,
git remote add
все ваши пульты индивидуально ... а затемgit config -e
и добавить объединенный пульт. Предполагая, что у вас есть этот репозиторийconfig
:… Чтобы создать объединенный пульт для
"Paws"
и"Codaset"
, я могу добавить следующее после всех этих:Как только я это сделаю, когда я
git push Origin Master
, это подтолкнет к обоимPaws/Master
иCodaset/Master
последовательно, делая жизнь немного легче.источник
git config -e
открывает.git/config
файл в выбранном вами редакторе.git
командная строка поддерживает это изначально, сgit remote set-url ... --add
.[branch "Master"]
наборомremote = Origin
иgit pull
будем использовать оба пульта.Начиная с git 1.8 (октябрь 2012 г.) вы можете сделать это из командной строки:
Затем
git push
нажмите на user1 @ repo1, затем нажмите на user2 @ repo2.источник
git fetch
. (Учитывая это, я не понимаю, без чегоgit remote set-url --add
может быть цель--push
.)Я добавил эти псевдонимы в мой ~ / .bashrc:
источник
git config alias.pushall '!for i in
git remote; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Вы можете добавить пульты с помощью:
Затем для обновления всех репозиториев сделайте:
источник
Вот мой пример со скриптом bash внутри
.gitconfig
раздела псевдонимовисточник
Я добавил два отдельных pushurl для удаленного «источника» в файле .git congfig. Когда я бегу, то
git push origin "branchName"
он пробежит до каждого URL. Не уверен, что есть более простой способ сделать это, но я работаю над тем, чтобы перейти к исходному коду Github и одновременно к исходному коду My.visualStudio.источник
Я позволил себе расширить ответ от nona-urbiz; просто добавьте это в ваш ~ / .bashrc:
Применение:
Если вы не предоставите какой-либо аргумент ответвления для git-pullall, то извлечение данных с удаленных устройств по умолчанию не будет выполнено; оставил это поведение как есть, так как оно аналогично git.
источник
Вам понадобится скрипт, чтобы пройти через них. Git не обеспечивает "толкать всех". Теоретически вы можете выполнить push в нескольких потоках, но собственный метод недоступен.
Получить еще сложнее, и я бы рекомендовал делать это линейно.
Я думаю, что ваш лучший ответ - это когда-то иметь машину, на которую все будут толкать / тянуть, если это вообще возможно.
источник
Для обновления пультов (т.е.
pull
дела) все стало проще.Заявление Линуса
в ссылочной записи в списке рассылки Git в elliottcable ответ больше не верен.
git fetch
узнал--all
параметр где-то в прошлом, позволяющий получить все пульты за один раз.Если не все запрошены, можно использовать
--multiple
коммутатор для указания нескольких пультов или группы.источник
Я хотел работать в VSO / TFS, а затем публично нажать на GitHub, когда будет готов. Начальный репо создан в частном ВСО. Когда пришло время добавлять в GitHub, я сделал:
Работал как чемпион ...
Для проверки работоспособности введите «git remote -v», чтобы получить список репозиториев, связанных с проектом.
Простой способ, работал для меня ... Надеюсь, это кому-то поможет.
источник
git push -f
без причины, например, неудачаgit push
или точное знание того, что вы делаете, - плохая идея, потенциально вредная. Это также не отвечает на вопрос, но как добавить второй пульт.Добавьте псевдоним для глобального gitconfig (/home/user/.gitconfig) с помощью команды ниже.
Как только вы передадите код, мы скажем
подтолкнуть к происхождению по умолчанию. После псевдонима, мы можем сказать,
и код будет обновлен для всех пультов, включая исходный пульт.
источник
Добавление
all
пульта становится немного утомительным, так как вам нужно настроить на каждой машине, которую вы используете.Кроме того, все псевдонимы
bash
иgit
псевдонимы предполагают, что у вас есть push для всех пультов. (Пример: у меня есть форк,sshag
который я поддерживаю на GitHub и GitLab. У меня есть удаленный апстрим , но у меня нет разрешения на него.)Вот
git
псевдоним, который отправляет только на удаленные устройства с включенным URL-адресом@
.источник
источник