Мы работаем с полуцентрализованным репозиторием git здесь, где я работаю. У каждого разработчика есть собственное поддерево в центральном репозитории git, поэтому оно выглядит примерно так:
master alice/branch1 alice/branch2 bob/branch1 michael/feature release/1.0 release/1.1
Работая локально в моем дереве, у меня есть topic/feature
, который соответствует michael/feature
в центральном дереве.
Я использовал
git push origin topic/feature:michael/feature
чтобы отправить мои изменения в удаленное дерево. Однако это обременительно и подвержено ошибкам (например, пропуск имени разработчика, неправильное написание имени функции и т. д.).
Я ищу более чистый способ сделать это. Например, «git push
». Я подозреваю, что установка другого пульта дистанционного управления с измененной ссылкой на выборку сделает это, но я не уверен, как именно это сделать. Я также не уверен, как изменить мои текущие определения веток, чтобы использовать другой пульт.
Мой текущий .git/config
выглядит примерно так:
[remote "origin"] url = git://central/git/project fetch = +refs/heads/*:refs/remotes/origin/* [branch "topic/feature"] remote = origin merge = refs/heads/michael/project
Редактировать: Я также хотел бы применить это к извлечению / извлечению. Но позаботится ли об этом branch.<name>.merge
?
Я продолжу исследовать это и опубликую здесь, если что-то найду, но я надеюсь получить и другие хорошие идеи.
Изменить 2: Я решил оставить имена локальных и удаленных веток одинаковыми. Похоже, это будет наименее трудоемким и наименее подверженным проблемам в будущем.
На самом деле это часто возникает при развертывании git для размещения таких сервисов, как Heroku, Nodester и AppFog.
В разделе [удаленное "происхождение"] добавьте по одной строке для каждого сопоставления. В том числе от мастера к мастеру.
push = refs/heads/master:master
push = refs/heads/topic/feature:michael/feature
Я не уверен, как это сделать с помощью команды git-config.
Имейте в виду, что с этого момента все ветки выталкиваются одновременно, когда вы выполняете прямой git push (без параметров).
Не могли бы вы объяснить, почему вы не сохраняете одни и те же имена веток локально и удаленно?
Хороший аргумент в отношении соответствия ветвей ... Я могу переключиться на это. Вместо этого можно ли включать в push-сопоставления подстановочные знаки, аналогичные общему в вопросе?
Если вы можете, я предлагаю вам использовать одни и те же имена веток локально и удаленно. Затем git push
переместит все ваши локальные ветки в соответствующие ветки в центральном репозитории.
Чтобы использовать разные префиксы в локальных и удаленных репозиториях, вам необходимо добавлять сопоставление в ваш файл конфигурации каждый раз, когда вы создаете новую ветку функции. Команда для настройки сопоставления для темы / BRANCH_NAME:
git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME
Вы можете сопоставить свою ветку с другой веткой отслеживания на пульте дистанционного управления примерно так:
git remote add heroku [email protected]:YOURAPPNAME.git
git checkout -b heroku -t heroku/master
Ваша конфигурация в конечном итоге похожа на то, что предлагает @Paul (на самом деле, немного «проще»).
См. Эту суть (с моими настройками) для шагов по использованию, которые подходят мне https://gist.github.com/2002048.
Использовать
git branch --set-upstream-to=origin/remoteBranch localBranch
Пожалуйста, добавьте объяснение, чтобы автор сообщения также мог узнать, как это работает.
Когда вы изменяете .git / config, не забудьте сначала сделать его резервную копию. Если вы что-то напортачите, вам нужно только восстановить заведомо исправную версию файла, чтобы вернуться в соответствующее состояние.