개요
2024.01.05-[GitLab] git cli로 Merge Request 생성에서 CLI를 이용해 MR을 생성하는 방법을 정리했다. 해당 부분을 프로그램 상에서 테스트하기 위해 공통 저장소를 Fork한 뒤, Fork 저장소로 MR 생성을 시도해보았는데……Fork 저장소가 아니라 원본(업스트림) 저장소를 대상으로 MR이 생성되는 현상을 확인했다.
원인을 파악하고 해결해본다.
원인
사실 달리 원인이 있던 것은 아니고…… push_option을 사용해 MR을 생성할 프로젝트를 지정할 수 있는 기능이 비교적 최근에 개발되었다.
아무래도 처음 merge_request 관련 옵션을 개발할 때 Fork 저장소에서 업스트림 저장소를 대상으로 MR이 생성된다는 사용자 시나리오를 생각하고 개발한 것 같다. 그 이후 이슈를 제기한 사용자(https://gitlab.com/gitlab-org/gitlab/-/issues/31227)에 의해 MR 생성 대상 프로젝트를 지정할 수 있는 옵션으로 merge_request.target_project이 추가되었다.
해결 방법
1. merge_request.target_project 옵션 추가
Git Push CLI에 merge_request.target_project 옵션을 사용하여 MR을 생성할 프로젝트를 지정할 수 있다.
git push <REMOTE> <BRANCH>\
-o merge_request.create \ # push 브랜치에 대한 MR 생성
-o merge_request.target_project=<path/to/project>
-o merge_request.target=my-target-branch \ # Merge 요청 대상 지정
-o merge_request.remove_source_branch \ # Merge 시 source 브랜치 삭제
-o merge_request.title="<title>" \ # MR 제목 지정
-o merge_request.description="<description>" \ # MR description 지정
-o merge_request.assign="<user>" # Merge Request 할당자 지정
다만, 해당 옵션이 GitLab 16.6에서 추가되었기 때문에, 사용 중인 GitLab 버전을 확인해야 한다.
참고로 이 글의 경우 GitLab 버전이 15.11.2였기 때문에 이 방법은 사용할 수 없었다……. 이후에 GitLab에서 서비스하고 있는 원격 저장소에서 테스트할 예정이다.
2. Fork 저장소 MR 기본 대상 프로젝트 변경
Fork 저장소가 업스트림 저장소로 MR을 생성하지 않는다면, Fork 저장소의 기본 설정을 변경하는 방법을 사용할 수 있다.
- 프로젝트 메뉴 > 설정 > 머지 리퀘스트로 이동
- Target project 항목을 이 프로젝트로 변경
이 설정을 변경하면 Web UI로 MR을 생성할 때도 대상 프로젝트가 업스트림 저장소가 아니라 현재 저장소로 지정된다.
참고 문서
https://docs.gitlab.com/ee/user/project/push_options.html
https://gitlab.com/gitlab-org/gitlab/-/issues/31227
https://gitlab.com/gitlab-org/gitlab/-/issues/232502
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/132475