개요
로컬 GitLab 레포지터리에서 발생한 수정 사항을 원격지에 Push 하고 싶다.
Branch 전략에 의해 master/main 브랜치에 직접 push하는 게 아니라 Merge Request를 통해 수정 사항을 반영하려고 하는데, 이 과정을 자동화할 수 있었으면 한다.
혹시 Git CLI 등으로 MR을 생성할 수 있는지, 어떻게 하는지 정리한다.
git push -o
구글링과 공식 문서에 의하면 Git 2.10 이상 GitLab 11.10부터 push 명령에 옵션을 추가하여 MR을 생성할 수 있다고 한다.
git push --push-option=<push_option>
# 또는
git push -o <push_option>
사용할 수 있는 옵션은 여러가지인데 MR 생성과 설정에 대한 기본적인 옵션 정도만 살펴봤다.
git push <REMOTE> <BRANCH>\
-o merge_request.create \ # push 브랜치에 대한 MR 생성
-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 할당자 지정
이외 다른 MR 관련 push 옵션은 아래 링크에서 확인하는 것이 좋겠다.
https://docs.gitlab.com/ee/user/project/push_options.html#push-options-for-merge-requests
테스트
이제 실제로 git 명령어로 MR을 생성할 수 있는지 확인해 본다.
테스트 레포지터리
main 브랜치만 존재하는 test 레포지터리에 MR을 생성해 본다. merge 요청 대상 브랜치는 main이다.
1. 로컬 레포지터리에 신규 브랜치 생성 및 수정
테스트할 레포지터리를 로컬 컴퓨터에 Clone, 신규 브랜치 생성 및 파일을 수정한다.
git clone <GITLAB_REPOSITORY>
cd GITLAB_REPOSITORY
git checkout -b <NEW_BRANCH>
2. 수정 사항 Commit
수정한 부분을 Commit 한다.
git add <FILE>
git commit -m "<MESSAGE>"
3. MR 생성
위에서 확인한 대로 옵션을 주어 git push를 수행한다.
git push origin test_create_mr \
-o merge_request.create \
-o merge_request.target=main \
-o merge_request.remove_source_branch \
-o merge_request.title="TEST MR" \
-o merge_request.description="MAKE MR using CLI" \
-o merge_request.assign="qwer1111"
이상이 없다면 push가 정상적으로 이뤄진다.
4. 원격 레포지터리 MR 확인
push 결과에서 확인할 수 있는 MR 링크 등으로 원격 레포지터리의 MR을 확인해 보면 push 옵션으로 지정한 내용대로 MR이 생성된 것을 확인할 수 있다.
참고 문서
https://docs.gitlab.com/ee/user/project/push_options.html
https://stackoverflow.com/questions/37410262/how-to-create-a-gitlab-merge-request-via-command-line