Могу ли я отобразить локальные ветви на удаленные ветви с разными префиксами в git? - PullRequest
11 голосов
/ 03 октября 2008

Мы работаем с полуцентрализованным 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». Я подозреваю, что установка другого пульта с измененной привязкой 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? 1023 *

Я буду продолжать исследовать это и публиковать здесь, если найду что-то, но я надеюсь получить другие хорошие идеи.

Редактировать 2: Я решил, что имена локальных и удаленных филиалов будут одинаковыми. Похоже, что это будет наименьшая работа и наименее подвержены будущим проблемам.

Ответы [ 3 ]

3 голосов
/ 04 октября 2008

В разделе [удаленное «происхождение»] добавьте одну строку для каждого отображения. В том числе мастер-мастер.

push = refs/heads/master:master
push = refs/heads/topic/feature:michael/feature

Я не уверен, как это сделать с помощью команды git-config.

Имейте в виду, что с этого момента все ветви перемещаются одинаково, когда вы выполняете прямой git push (без параметров).

Не могли бы вы объяснить, почему вы не используете одни и те же имена веток локально и удаленно?

2 голосов
/ 04 октября 2008

Если вы можете, я предлагаю вам использовать одни и те же имена веток локально и удаленно. Затем git push переместит все ваши локальные ветви в соответствующие ветви в центральном хранилище.

Чтобы использовать разные префиксы в локальных и удаленных репозиториях, вам необходимо добавлять сопоставление в файл конфигурации каждый раз, когда вы создаете новую ветвь функций. Команда для настройки сопоставления для темы / BRANCH_NAME:

 git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME
1 голос
/ 14 марта 2012

Вы можете сопоставить свою ветку с другой веткой отслеживания на пульте примерно так:

git remote add heroku git@heroku.com:YOURAPPNAME.git
git checkout -b heroku -t heroku/master

Ваша конфигурация в конечном итоге похожа на то, что предлагает @Paul (на самом деле "проще").

См. Эту суть (с твиками мной) для шагов использования, которые хорошо работают для меня https://gist.github.com/2002048.

...