1️⃣ 오픈소스 레포지토리 Fork
Fork를 통해 다른 사용자(또는 조직)의 레포지토리를 내 레포지토리로 복제한다.
GitHub의 Fork와 Clone은 모두 레포지토리를 가져오지만 단순히 원격 저장소의 내용을 로컬 작업 환경으로 가져오는 Clone과는 달리 Fork는 변경사항을 원본 저장소에 반영할지 여부를 선택할 수 있어 주로 오픈 소스 프로젝트에 기여할 때 사용된다.
2️⃣Fork 한 레포지토리 Clone
Fork를 통해 복사된 내 레포지토리를 IDE로 Clone 해 로컬 개발 환경에서 작업하기 위한 준비를 한다.
3️⃣ 소스코드 수정 및 commit, push
오픈 소스에서 수정할 코드 및 문서를 찾아 수정한다. 나의 경우 Spring Boot 코드를 읽으며 수정할 내용을 찾았다.
오픈 소스들은 보통 코딩 및 커밋 컨벤션을 가지고 있기 때문에 해당하는 규칙을 만족해야 한다.
나는 Spring Boot를 수정했기 때문에 해당하는 커밋 메세지 규칙으로 커밋한 뒤 원격 저장소에 push 해주었다.
Spring Boot의 코드 스타일은 여기서 확인할 수 있다.
4️⃣ Pull Request 작성
push 후 Fork 받은 내 레포지토리에서 Contribute → Open pull request 하면 실제 프로젝트의 PR 작성 화면으로 리다이렉트 된다.
PR 제목과 내용을 작성한 후 Create 하면 Pull Request가 등록된다.
5️⃣ 오픈 소스 컨트리뷰터 라이선스 동의
이전에 오픈 소스에 컨트리뷰트 라이센스 동의를 하지 않았으면 깃허브 액션을 통해 라이선스를 동의하라는 코멘트가 자동으로 달린다.
Contributor License Agreement 링크로 들어가 CLA에 동의한다.
나의 경우 개인적인 컨트리뷰트였기 때문에 왼쪽의 Sign Individual CLA에 서명을 했다.
정상적으로 동의 처리가 되면 CLA에 서명해 주어 고맙다는 코멘트가 달린다.
6️⃣ PR 검토 및 merge
내가 올린 PR을 레포지토리 owner가 직접 피드백 후 해당 수정 사항을 반영할지 거절할지를 결정한다.
며칠 후 확인해 보면 내가 수정한 코드가 반영되고 오픈 소스 레포지토리의 컨트리뷰터에 등록된 것을 확인할 수 있다.
내가 수정한 코드는 링크된 PR 페이지에서 확인할 수 있다.
코드에서 이미 ArrayList로 초기화되어 있어 null 값이 될 수 없는 변수에 대한 불필요한 null 체크를 제거했다는 내용이다.
많은 사람들이 사용하고, 특히 내가 주로 사용하는 스프링 부트의 컨트리뷰터가 되었다니 너무 뿌듯하다. 🥺🥺🥺
'Study' 카테고리의 다른 글
[Java] Method Area는 Heap 영역이 아니다! (1) | 2024.02.19 |
---|---|
[Java] 자바 런타임 데이터 영역(Runtime Data Area) (0) | 2024.02.19 |
[Java] 변수와 객체 데이터 저장 (0) | 2024.02.17 |
[DB] 트랜잭션의 격리 수준(Isolation Level)이란? (0) | 2024.02.16 |
[Java] 객체비교 시 equals()와 hashcode() 둘 다 재정의해야 하는 이유 (0) | 2024.02.13 |