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