Можно ли сопоставить локальные ветки с удаленными ветвями с разными префиксами в 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

чтобы внести изменения в удаленное дерево. Однако это громоздко и подвержено ошибкам (например, опускание имени разработчика, неправильное написание имени функции и т.д.).

Я ищу более чистый способ сделать это. Например, "git push". Я подозреваю, что установка другого пульта с измененным fetch 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

Изменить: Я также хотел бы применить это для pull/fetches. Но заботится ли об этом branch.<name>.merge?

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

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

Ответ 1

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

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

 git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME

Ответ 2

В разделе [remote] origin] добавьте по одной строке для каждого сопоставления. Включая мастер для мастеринга.

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

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

Помните, что с этого момента все ветки нажимаются одинаково, когда вы выполняете прямое нажатие git (без параметров).

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

Ответ 3

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

git remote add heroku [email protected]:YOURAPPNAME.git
git checkout -b heroku -t heroku/master

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

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