Оформить запрос ветки слияния без добавления удаленного - PullRequest
1 голос
/ 01 апреля 2019

Мне нравится инструмент для GitHub, называемый Hub, но я не могу использовать его при работе с сервером GitLab моей компании. Решение GitLab заключается в предоставлении этих инструкций, когда я хочу проверить ветку запроса на слияние для проверки:

Шаг 1. Выбрать и проверить ветку для этого запроса на слияние

git fetch ssh://gitlab.myserver.com:29418/username/repo.git branch_name
git checkout -b username/branch_name FETCH_HEAD

Это хорошо для проверки ветки, но не полезно, когда есть обновления, которые я хочу получить (мне нужно удалить ветку и снова запустить эту команду. Что я действительно хочу, так это иметь команду, которая добавит ее в мой репозиторий .git/config как это:

[branch "branch_name"]
    remote = ssh://gitlab.myserver.com:29418/username/repo.git
    merge = refs/heads/branch_name

Если я наберу это вручную, все будет отлично, и я могу git pull довольствоваться душой, когда есть обновление, но я не могу понять, какую команду набрать в первый раз, чтобы избежать необходимости возвращаться и редактировать мой .git/config вручную.

И прежде чем вы это предложите, да, я знаю, что могу добавить пульт дистанционного управления username/repo, но в моей команде много людей, и я не хочу, чтобы все их ветви загромождали мое локальное репо, когда я что-то делаю как:

git fetch --all --prune
git log --graph --all --decorate --abbrev-commit --pretty=format:'%C(yellow)%h %Cred%cd %Cblue%an%C(auto)%d %Creset%s' --date=short

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Итак, я нашел решение, которое использует тот факт, что GitLab отражает исходную ветку PR в целевом репо под merge-requests/<number>/head. Это не мое любимое решение, потому что в прошлом у меня были проблемы, когда зеркало долгое время не синхронизировалось с исходной веткой, но это все, что у меня есть сейчас.

mr = "!f() { \
    git fetch $1 merge-requests/$2/head:mr-$1-$2 && \
    git checkout mr-$1-$2 && \
    git config --add branch.mr-$1-$2.remote $1 && \
    git config --add branch.mr-$1-$2.merge mr-$1-$2; \
    }; \
    f"

Мне все еще было бы интересно услышать другие решения, особенно если они могли бы работать с оригинальной веткой источника.

0 голосов
/ 01 апреля 2019

В конечном итоге ваше ручное решение добавляет два значения конфигурации;Вы можете сделать это с помощью команды git config, а не редактировать файл напрямую.Я понимаю, что это не совсем то, что вы имели в виду, но это, вероятно, более простой способ понять, что вы делаете.(Особенно если учесть, что у вас, вероятно, только один удаленный URL-адрес; или, если не один, достаточно нескольких, чтобы вы могли создать псевдоним для каждого при необходимости.)

Другой способ посмотреть на это - поддержка gitдля частого доступа к репо по заданному URL-адресу необходимо добавить удаленный .Вы отклонили это, поскольку в определение аргумента log '--all (и аналогичных) он будет включать ссылки на удаленное отслеживание;но вместо этого вы можете пересмотреть, какие аргументы вы используете.Например, если вы добавили gitlab в качестве пульта с именем gitlab, вы могли бы тогда

git log --exclude=refs/remotes/gitlab/* --all

, или вы можете обнаружить, что может служить некоторая комбинация --branches, --tags, --glob и т. Д.Ваши потребности лучше, чем в первую очередь использовать --all.

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

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