Как создать запрос слияния GitLab через командную строку

Мы работаем над интеграцией GitLab (корпоративной версии) в нашем инструменте, но одна вещь, которая по-прежнему находится в нашем списке желаний, заключается в создании запроса слияния в GitLab через командную строку (или пакетный файл или аналогичный, если на то пошло). Мы хотели бы интегрировать это в наш инструмент. Поиск здесь и в Интернете заставляет меня поверить, что это невозможно с помощью родного GitLab, но для этого нам нужны дополнительные инструменты.

Правильно ли я? И какой инструмент я бы хотел использовать для этого?

Ответы

Ответ 2

Начиная с GitLab 11.10, если вы используете git 2.10 или новее, вы можете автоматически создать запрос на слияние из командной строки следующим образом:

git push -o merge_request.create

Дополнительную информацию можно найти в документах.

Ответ 3

Вы можете использовать следующую утилиту.

Раскрытие: я разработал это.

https://github.com/vishwanatharondekar/gitlab-cli

Вы можете создать запрос на слияние, используя это.

Некоторые из функций, которые он имеет.

  1. Базовая ветка не обязательна. Если базовая ветка не указана. Текущая ветвь используется как базовая ветвь.
  2. Целевая ветка не обязательна. Если целевая ветка не указана, будет использоваться ветка репо по умолчанию в gitlab.
  3. Страница созданного запроса будет автоматически открыта после успешного создания.
  4. Если заголовок не поддерживается со значением опции -m. Он будет взят из открытого редактора. Первая строка берется в качестве заголовка.
  5. В открывшемся редакторе третья строка принимает в качестве описания.
  6. Разделенный запятыми список меток может быть предоставлен с его опцией.
  7. Поддерживает CI.
  8. Конфигурации репозитория могут быть предоставлены.
  9. Сквош вариант доступен.
  10. опция удаления исходной ветки доступна.

Ответ 4

На данный момент GitLab, к сожалению, этого не поддерживает, однако недавно я увидел его в своем вопросете трекера. Похоже, в ближайшие месяцы можно ожидать "родной инструмент".

Недавно GitLab анонсировал numa08/git-gitlab, поэтому, думаю, стоит попробовать.

Ответ 5

В нашем скрипте сборки мы просто открываем браузер с правильным URL-адресом и позволяем разработчику написать свои комментарии в форме, нажав "сохранить", чтобы создать запрос на слияние. Вы получите этот URL с правильными параметрами, создав запрос на слияние вручную и скопировав URL формы.

#!/bin/bash
set -e
set -o pipefail

BRANCH=${2}

....

git push -f origin-gitlab $BRANCH
open "https://gitlab.com/**username**/**project-name**/merge_requests/new?merge_request%5Bsource_branch%5D=$BRANCH&merge_request%5Bsource_project_id%5D=99999&merge_request%5Btarget_branch%5D=master&merge_request%5Btarget_project_id%5D=99999"

Ответ 6

Если вы нажмете свою ветку перед этой командой (git push -o merge_request.create), она не будет работать. Git ответит Everything up-to-date, и запрос на слияние не будет создан (gitlab 12.3).

Когда я пытался удалить свою ветку с сервера (не удаляйте вашу локальную ветку !!!), тогда у меня это получалось в таком виде.

git push --set-upstream origin your-branch-name -o merge_request.create

Ответ 7

Я использую https://github.com/mdsb100/cli-gitlab

Я создаю MR из контейнера докеры gitlab CI на основе альпийского linux, поэтому я включаю команду install в before- script (которая также может быть включена в ваше изображение). Все команды в следующем файле .gitlab-ci.yml также применимы для обычного использования командной строки (если у вас установлен cli-gitlab npm).

variables:
    TARGET_BRANCH: 'live'
    GITLAB_URL: 'https://your.gitlab.net'
    GITLAB_TOKEN: $PRIVATE_TOKEN #created in user profile & added in project settings
before-script:
    -apk update && apk add nodejs && npm install cli-gitlab -g
script:
    - gitlab url $GITLAB_URL && gitlab token $GITLAB_TOKEN
    - 'echo "gitlab addMergeRequest $CI_PROJECT_ID $CI_COMMIT_REF_NAME \"$TARGET_BRANCH\" 13 `date +%Y%m%d%H%M%S`"'
    - 'gitlab addMergeRequest $CI_PROJECT_ID $CI_COMMIT_REF_NAME "$TARGET_BRANCH" 13 `date +%Y%m%d%H%M%S` 2> ./mr.json'
    - cat ./mr.json

Это будет эхо-сигнал true, если запрос слияния уже существует и повторит результат json нового MR, если ему удастся его создать (также сохраняя файл mr.json).