Могу ли я отобразить локальные ветви на удаленные ветви с разными префиксами в git?
Вопрос
Мы работаем с полуцентрализованным 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
чтобы перенести мои изменения в удаленное дерево. Однако это громоздко и может привести к ошибкам (например, опущение имени разработчика, неправильное написание имени функции и т. Д.).
Я ищу более чистый способ сделать это. Например, & Quot; git push
& Quot ;. Я подозреваю, что установка другого пульта с измененной привязкой refspec сделает это, но я не уверен, как именно это сделать. Я также не уверен, как изменить мои текущие определения веток, чтобы использовать другой пульт.
Мой текущий .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 . Я решил, что имена локальных и удаленных веток будут одинаковыми. Похоже, что это будет наименьшая работа и наименее подвержены будущим проблемам.
Решение
Если вы можете, я предлагаю вам использовать те же имена веток локально & amp; удаленно. Затем git push
переместит все ваши локальные ветви в соответствующие ветви в центральном хранилище.
Чтобы использовать разные префиксы в локальных и удаленных репозиториях, необходимо добавлять сопоставление в файл конфигурации каждый раз, когда вы создаете новую функциональную ветвь. Команда для настройки сопоставления для темы / BRANCH_NAME:
git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME
Другие советы
В разделе [remote " origin "] добавьте по одной строке на отображение. Включая мастер-мастер.
push = refs/heads/master:master
push = refs/heads/topic/feature:michael/feature
Я не уверен, как это сделать с помощью команды git-config. Р>
Имейте в виду, что с этого момента все ветви перемещаются одинаково, когда вы выполняете прямой git push (без параметров).
Не могли бы вы объяснить, почему вы не используете одни и те же имена веток локально и удаленно?
Вы можете сопоставить свою ветку с другой веткой отслеживания на пульте примерно так:
git remote add heroku git@heroku.com:YOURAPPNAME.git
git checkout -b heroku -t heroku/master
Ваша конфигурация в конечном итоге похожа на то, что предлагает @Paul (немного " проще " на самом деле).
См. эту суть (с некоторыми изменениями), чтобы узнать, какие шаги для меня подходят. https: //gist.github .com / 2002048 .