첫 git rebase 적용한 썰

·2024년 8월 7일
0
post-custom-banner

개요

Git 을 공부하며 과연 rebase 를 쓸일이 실무에서 얼마나 있을까 생각했던 적이 있다.

push 이전의 단계라면 reset 이라는 대안이 있으며, 많은 내용을 push 한게 아니라면, 기존 브랜치를 삭제시키고, 원본에서 새 브랜치를 생성하여 코드를 복붙 한 후 차례 차례 commit 해서 push 하는 방법도 있다.

개인적으로도 나의 실패?한 흔적을 남기고 싶지 않은 마음에, 새 브랜치를 생성시켜 호다닥 처리하는 방식을 선호한다.

그런데 그것이 실제 일어났습니다.

지금 생각해보면, 이렇게 rebase를 직면하기도 어려울듯 한데, 극악의 확률 뽑기에 당첨된 이 눈물나는 상황으로 추억으로 공유하고자 글을 작성하게 되었다.

상황

최근 OSSCA 를 통해 yorkie-team 에서 오픈소스 기여 활동을 하고 있다.

당차게 기능을 구현한 후 PR 을 올렸더니, CLA assistant 가 해당 PR 을 승인하지 못하는 문제 발생했다.

원인 1. CLA (기여자 라이센스 동의, Contributor License Agreement)

기여자 라이센스 동의는 지식 재산권이 회사/프로젝트에 기여되는 조항을 정의한다. 프로젝트 산물의 후견인이 모든 기여에 대해 필요한 소유권이나 권한을 가지도록 보장하도록 하는 것이다.

오픈소스(특히 서비스가 배포된)는 다수의 외부 개발자가 서비스에 기여를 하기 때문에, 서비스의 소유주인 회사 혹은 팀에게 기여한 저작물에 대한수정/사용/배포 권한을 부여하여, 필요할 때에 직권을 양도할 필요가 있다.

간단하게 말하자면, PR 요청 시 기여자가 CLA 를 서명하지 않았다면, 해당 기능은 프로젝트에 적용하기 어려운 것이다.

CLA assistant 승인과정

githubCLA assistant 가 병합을 허용하는 과정은 다음과 같다.

  1. 프로젝트 메인테이너는 승인해야할 CLA 문서를 작성하여 리포지토리에 업로드한다.
  2. 기여자가 PR 시, CLA 파일의 URL 로 이동하여 페이지에서 서명을 진행한다.
  3. 서명자에 해당 유저의 깃허브 이름과 이메일이 등록된다.
  4. CLA assistantwebhook 을 통해 push 된 커밋 내역을 확인하여 인증된 유저의 이름 혹은 이메일인 경우, 병합을 허용한다.

원인 2. 맥북 포맷

오픈소스 기여를 시작하기 전, 노트북을 한번 쫙 포맷했다. 맥북의 경우 깃을 처음 설치할 때, 유저 설정을 진행하지 않았다면 깃은 다음과 같이 기본 유저 설정을 적용한다.

  • 이름 : 맥북의 사용자 이름
  • 이메일 : 맥북의 로컬 이메일 (맥북 에어의 경우, xxxx@macbook-air.local)

즉, 오픈소스 기여 커밋에는 맥북의 사용자 이름과 로컬 이메일 내역으로 author 정보가 반영되었고, CLA 를 승인한 github 의 이름과 이메일이 다르니 CLA assitant 를 통해 승인을 했음에도 병합을 허용하지 않았던 것이다.

이메일 등록하기

이에 대한 해결 방법 중 하나로, github 사용자 설정에 새로운 이메일을 등록하는 방법이 있다. 이 과정에서 등록하려는 이메일에 대한 승인 메일이 전송된다.

그러나 맥북의 로컬 이메일은 일반적인 메일을 전송받지 못하기 때문에, 이 방법은 적용이 불가능했다.

글로벌 설정을 통해 git 의 사용자 설정을 변경한 후, 새 브랜치를 만들어 다시 커밋을 할까 고민했으나 commit 내역이 10개 이상 넘어가는 걸 보고, 한치의 망설임 없이 git rebase 를 호출했다.

rebase 활용하여 author 수정하기

rebase 를 활용하여 기존 push 된 내역에 대해 author (작성자 및 이메일) 을 수정할 것이다. 해당 과정은 다음과 같다.

1. rebase 를 적용시킬 커밋 범위를 선택한다.

git rebase -i {변경할 커밋의 해시값}^
git rebase -i {변경할 커밋의 이전 커밋의 해시값}

2. editor 로 보이는 pick 내역을 edit 혹은 e 로 변경한 후, rebase를 시작한다.

git rebase --continue

3. 커밋에 대해 다음 명령어를 수행하여, author 를 수정한다.

git commit --amend --author="작성자명 <email주소>"

4. 다음 커밋으로 이동한다.

git rebase --continue

5. 3~4 과정을 반복한다.
6. rebase 를 모두 완료했다면 강제 push를 진행한다.

git push -f origin +브랜치이름

10번의 과정을 반복한 후 push 를 하자, 이제서야 CLA가 승인을 해주는 모습을 볼 수 있다.

아, 행복해 :)

참고

rebase 를 통한 author 수정은 아래의 페이지를 참고했다.

Github 여러 Commit의 Author(커밋 작성자) 변경하기

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.
post-custom-banner

0개의 댓글