В Git, как мне настроить мои локальные филиалы, чтобы они имели префикс, когда я отправляю их sh на удаленный компьютер? - PullRequest
1 голос
/ 11 марта 2020

Я работаю в команде, которая имеет стандарт именования филиалов, для которого требуется определенный префикс c для филиалов в центральном репозитории git. Этот префикс выглядит следующим образом:

dev/<name>/<topic>

Пример:

dev/john/my-feature

Локально, из соображений здравого смысла, я не хочу иметь дело с префиксом. Это шаблон, который делает набор команд более утомительным. Вместо этого я хочу, чтобы моя ветвь локально была просто <topic>, что в приведенном выше примере - просто my-feature.

. Я хочу посмотреть, какой тип pu sh и получить рабочий процесс, к которому я могу построить сделайте этот префикс максимально прозрачным. Во-первых, позвольте мне поделиться некоторыми интересными вариантами конфигурации, которые я в настоящее время установил в своих глобальных .gitconfig:

[push]
    default = current
[remote]
    pushDefault = fork

Настройки удаленного указания c могут не иметь значения, но я включил их для полноты. Я хочу поддержать три различных варианта использования:

  1. Когда я выбираю удаленные ветви, содержащие префикс dev/john, я хочу, чтобы они отображались локально в refs/remotes/origin/<topic>. Например, удаленная ветвь refs/heads/dev/john/my-feature должна быть извлечена локально в refs/remotes/origin/my-feature.
  2. Когда я пу sh из локальной ветки refs/heads/my-feature в удаленную origin, она должна отображаться в refs/heads/dev/john/my-feature на Remote.
  3. Когда я пу sh refs/heads/master, на пульте все равно должно быть go до refs/heads/master. Ветвь master должна полностью игнорировать префикс.

Вот удаленная конфигурация для origin в моем репо .git/config, которая у меня есть до сих пор. Обратите внимание, что я только что тестировал git push на данный момент, я понимаю, что выборка refspe c не поддерживает первый вариант использования выше.

[remote "origin"]
    url = git@mydomain:myrepo
    fetch = +refs/heads/dev/john/*:refs/remotes/origin/*
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = refs/heads/master:refs/heads/master
    push = refs/heads/*:refs/heads/dev/john/*

Вот то, что я наблюдал так far:

  1. git fetch origin пока работает во всех случаях: ветви под refs/heads/dev/john/ отображаются на refs/heads/origin/. А все остальное - обычное прямое отображение, к которому мы все привыкли.
  2. Выполнение git push -n origin master дало ожидаемые результаты.
  3. Выполнение git push -n origin my-feature дало ожидаемые результаты. В частности:

    • [новая ветка] my-feature -> dev / john / my-feature
  4. С локальной веткой с именем my-feature проверил, команда git push -n origin pu sh не соблюдала push.default, и вместо этого выдвинула все локальные ветви. Я ожидаю, что push.default по-прежнему используется в тех случаях, когда настройка remote.origin.push включает подстановочный знак в refspe c. Без указания исходной ветки, я хочу, чтобы она все еще предполагала, что я нажимаю текущую ветку, но просто сопоставляю ее с другим удаленным номером ссылки.

Документация не поддерживает поведение, которое я Я утверждаю для случая git push -n origin, из того, что я прочитал. В частности, в документах [git -push] говорится (выделено мое):

Когда в командной строке не указано, что делать в pu sh с <refspec>... аргументами или --all, --mirror, --tags, команда находит значение по умолчанию <refspec>, консультируясь с конфигурацией remote.*.push, и, если она не найдена , учитывает конфигурацию push.default, чтобы решить, что делать с sh.

Так что все это, я полагаю, является долгим способом окончательно задать вопрос: как заставить git push -n origin дать мне такое же поведение git push -n origin my-feature с данной конфигурацией (отмечая, что изменение в Сама конфигурация приемлема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...