Как удалить мерж-реквест с сервера GitLab

Я создал мерж-реквест на gitlab (локальном) сервере. Теперь всякий раз, когда я нажимаю на запрос слияния, время ожидания запроса истекает с ошибкой 500. Раньше я получал код ошибки 504 и применил изменение, упомянутое в эта тема поддержки gitlab.

Все, что я хочу сделать, это удалить запрос на слияние. Есть ли способ сделать это вручную?


person Sanj    schedule 25.08.2015    source источник


Ответы (4)


Да, есть .... Мне не удалось найти способ удалить мерж-реквест в пользовательском интерфейсе, но вы можете просто удалить его из базы данных.

(Обратите внимание, что я тестировал это только на gitlab CE 8.4.0-ce.0 на Ubuntu 14.04.3 LTS. Другие версии могут иметь другую структуру базы данных)

В командной строке выполните следующую команду (от имени пользователя root):

sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -h /var/opt/gitlab/postgresql -d gitlabhq_production

Это вызовет командный терминал PostgreSQL. Затем вам нужно будет найти запрос на слияние, который вы хотите удалить. Введите в командном терминале PostgreSQL следующее:

select id, title from merge_requests;

Вы получите список идентификаторов и заголовков мерж-реквестов. Найдите тот, который хотите удалить, и обратите внимание на id

Хорошо, допустим, вы нашли запрос на слияние, который хотите удалить, а id - это 5. Вы просто собираетесь удалить все данные, связанные с этим запросом на слияние, используя следующие команды SQL. (Замените 5 в приведенных ниже командах своим фактическим запросом на слияние id)

delete from merge_requests where id = 5;
delete from merge_request_diffs where merge_request_id = 5;
delete from notes where noteable_type = 'MergeRequest' and noteable_id = 5;

Теперь вы можете выйти из командного терминала PostgreSQL, набрав:

\q

Теперь ваш мерж-реквест должен исчезнуть из веб-интерфейса.

person Ray Perea    schedule 24.01.2016
comment
Эта процедура все еще работает в Gitlab CE 8.5.8 (46bb47a). Так что я полагаю, что также, по крайней мере, на всех версиях между 8.4.0 и 8.5.8. - person Greg Dubicki; 21.03.2016
comment
Я думаю, что решение, предложенное @ thomas-keller, чище. Возникновение непосредственно в БД чревато ошибками, и вы должны быть на 100% уверены, что все правильно очистили. Использование API перекладывает эту ответственность на разработчиков GitLab, которые, несомненно, лучше понимают, что должно (и не должно) происходить при удалении MR. - person exhuma; 03.08.2017
comment
Я думаю, что в настоящее время предпочтительным решением должно быть использование веб-интерфейса, предложенного Эриком. stackoverflow.com/a/49779365/968531 - person NobodysNightmare; 08.07.2020

Вариант веб-интерфейса

Сегодня я обнаружил способ сделать это с помощью веб-интерфейса.

Итак, для Merge Request 14

https://gitlab.example.com/MyGroup/MyProject/merge_requests/14/edit

В правом нижнем углу вы должны увидеть красную кнопку Удалить.

Снимок экрана Gitlab Delete Merge Request

Вариант PowerShell

Invoke-RestMethod -Method Delete -Uri 'https://gitlab.example.com/api/v4/projects/PROJECT_ID_GOES_HERE/merge_requests/14' -Headers @{'PRIVATE-TOKEN'='PRIVATE_TOKEN_GOES_HERE'}

person Eric D. Johnson    schedule 11.04.2018
comment
К вашему сведению: кнопка «Удалить» доступна только в том случае, если у вас есть разрешение «Владелец». К сожалению, еще не задокументировано: разрешения GitLab - docs.gitlab.com/ee/user/permissions. html, но здесь есть подсказка о косвенном разрешении: удалите запрос на слияние - docs.gitlab.com/ee/api/ - person Doctor Rudolf; 17.05.2018
comment
Хорошая ясность @DoctorRudolf. Да, если у вас только уровень разрешений Master или Developer, вы не можете удалить через веб-интерфейс. - person Eric D. Johnson; 23.05.2018

Я не знаю, работает ли это и с CE, но, по крайней мере, у EE есть конечная точка API для удаления запросов на слияние:

curl --request DELETE --header "PRIVATE-TOKEN: <private_token>" https://gitlab.example.com/api/v3/projects/4/merge_request/85
person Thomas Keller    schedule 07.12.2016

Перейдите в целевой репозиторий, найдите в этом репозитории запрос на слияние и просто нажмите «Закрыть запрос на слияние». Поскольку это ваш мерж-реквест, у вас есть на это право.

person Warren    schedule 29.05.2017
comment
Закрытие - это не совсем то же самое, что удаление. Закрытие MR сохраняет его в БД для потомков. Иногда вам может потребоваться полностью избавиться от него (например, когда вы открываете MR, чтобы что-то проверить). - person exhuma; 03.08.2017