GitHub에서 프로젝트를 발견했고 그 프로젝트에 기여하고 싶습니다. 하지만 어떻게 해야 할까요? 개발자가 아니며 소스 컨트롤 용어도 낯설다면 걱정하지 마세요. 해답은 Git 풀 리퀘스트(PR)입니다.
이 튜토리얼에서는 Git 풀 리퀘스트를 사용하여 GitHub 프로젝트에 기여하는 방법을 배우게 됩니다. 이를 통해 코드를 GitHub 저장소에 반영할 수 있습니다.
GitHub 프로젝트에 기여하기
아마도 이미 버그를 수정하거나 문서를 업데이트하거나 새로운 기능을 추가할 수 있는 GitHub 프로젝트를 한 번 이상 보았을 것입니다. 참여하고 싶지만 다른 많은 IT 전문가들처럼 소프트웨어 개발자로 자신을 생각하지는 않을 것입니다.
Git과 GitHub는 주로 개발 영역에서 사용되어 왔습니다. 그러나 클라우드로의 인프라 이동과 인프라를 코드로 관리하는 도구들이 등장함에 따라 시스템 관리자들도 GitHub에서 더 많은 것을 탐색하고 있습니다.
많은 IT 전문가들은 어디서부터 시작해야 할지 모릅니다. 그래서 이 글에서는 기존 GitHub 프로젝트에 코드를 기여하는 방법을 처음부터 배우게 될 것입니다.
풀 리퀘스트(Pull Request)란 무엇인가요?
GitHub의 기존 프로젝트나 저장소에 더 많은 기능을 추가하거나 가치를 더할 코드/수정이 있는 경우 풀 리퀘스트를 생성할 수 있습니다.
풀 리퀘스트는 단일 동작이지만, 코드를 다른 사람의 GitHub 저장소에 넣는 최종 결과는 이 튜토리얼에서 배우게 될 다섯 가지의 단계를 거칩니다.
1. GitHub 계정으로 원래 저장소를 포크하거나 “복사”하기
“포킹”이라는 용어는 때때로 “클론”이라는 용어와 혼동될 수 있습니다. Git과 GitHub는 두 개의 별개의 제품입니다. “포킹”은 GitHub 용어로, GitHub 저장소를 복제하여 새로운 GitHub 저장소를 만드는 것을 의미합니다. “클론”은 Git 용어로, 원격 Git 저장소를 다운로드하여 컴퓨터의 로컬 Git 저장소를 만드는 것을 의미합니다.
2. 개인 포크된 저장소에 코드를 커밋하고 해당 코드를 GitHub 저장소에 푸시하기
3. 저장소 소유자에게 풀 리퀘스트 제출하기
4. 저장소 소유자가 풀 리퀘스트에서 변경 사항을 검토하고 승인하기
5. 저장소 소유자가 변경 사항을 마스터 브랜치에 병합하기
전제 조건
이 튜토리얼에서의 데모를 따라하기 위해 다음이 있는지 확인하세요:
- A GitHub account
- A GitHub repo to request changes to – This tutorial will use a repo called git-pull-requests.
- Git – 이 튜토리얼에서는 Windows에서 작업 디렉토리가 C:\Git인 Git을 사용합니다.
- 깃 GitHub 계정과 작업 설정하기
GitHub 리포지토리 복제하기
다른 사람의 GitHub 리포지토리에 직접 변경을 가할 수 없기 때문에, 먼저 자신의 리포지토리를 만들어야 합니다. 이를 위해 자신의 GitHub 계정에 리포지토리를 복제하거나 복사해야 합니다. 다음과 같이 진행하세요:
1. 웹 브라우저를 열고, GitHub로 이동하여 로그인합니다.
2. 튜토리얼의 리포지토리 또는 기여하고자 하는 리포지토리로 이동합니다. 아래에서 확인할 수 있습니다.

3. 오른쪽 상단에 있는 Fork 버튼을 클릭합니다. 이 버튼을 클릭하면 해당 리포지토리의 복사본이 자동으로 계정에 생성됩니다.

복제한 후, 리포지토리 목록에서 동일한 리포지토리를 볼 수 있습니다. 아래에서 확인할 수 있듯이, 이 리포지토리는 Adam-the-Automator\git-pull-requests에서 복제되었습니다.

개인 포크에 새 코드 커밋하기
이제 GitHub 계정에 자신의 리포지토리 개인 복사본이 있으므로, 변경 사항을 만드는 시간입니다. GitHub 리포지토리의 코드를 변경하는 방법은 두 가지로, github.com을 통해 직접 변경하거나 Git을 통해 로컬에서 변경할 수 있습니다. 두 가지 방법에 대해 알아보겠습니다.
github.com을 통한 코드 커밋하기
GitHub repo에서 코드를 변경하는 가장 쉬운 방법은 웹 브라우저를 사용하는 것입니다. github.com을 사용하면 로컬에 소프트웨어를 설정할 필요가 없습니다. 그러나 웹 브라우저를 사용하면 복잡한 변경을 수행해야 할 경우 곧 머리아플 수 있습니다.
여전히 포크된 저장소를 브라우저에서 보고 있다고 가정합니다:
1. 포크된 저장소에서 SampleText.ps1 스크립트를 클릭하고 편집할 때 연필 아이콘을 클릭하십시오.

2. 파일을 변경하고 아래에 표시된대로 커밋 변경사항 버튼을 클릭하십시오. 커밋 메시지를 선택적으로 추가할 수 있습니다.

Git을 사용하여 코드 커밋하기
GitHub 저장소에서 파일에 하나 이상의 간단한 변경을 수행할 계획이 있다면 Git을 사용해야 합니다. Git을 사용하면 전체 저장소를 로컬 컴퓨터로 복제하고 원하는 코드 편집기에서 코드를 작업할 수 있습니다.
복제하기
로컬에서 포크된 저장소의 코드를 작업하려면 먼저 Git을 사용하여 전체 저장소를 로컬 컴퓨터로 복제해야 합니다. 다음을 수행하십시오:
github.com의 포크된 저장소에 여전히 있을 때:
1. Code 버튼을 클릭하고 HTTPS 섹션 아래의 URL을 복사하십시오.

2. 그다음, 컴퓨터에서 명령 줄 콘솔을 엽니다. 이 튜토리얼에서는 Windows PowerShell을 사용합니다.
3. 복제된 저장소를 저장할 디렉토리를 만들고 이전 단계에서 복사한 URL을 가리키는 git clone
명령을 실행합니다.

로컬 파일 커밋 및 푸시
Git 저장소를 복제한 후 파일을 변경하고 이러한 변경 사항을 저장소에 커밋해야 합니다. 다음 단계를 따라 진행하세요:
1. 좋아하는 코드 편집기를 열고 C:\SampleText.ps1 스크립트를 편집하고 저장하세요.
2. 터미널 창에서 작업 디렉토리가 C:\Git인지 확인하고 아래 명령을 실행하세요. git add
명령은 파일을 로컬 Git 저장소에 추가하지만 저장하지는 않습니다. 해당 파일을 추적하기 시작하는 것뿐입니다.
3. 다음으로, git commit
명령을 사용하여 Git 저장소의 모든 추적된 파일을 커밋 또는 저장하세요. -m
매개변수와 함께 변경 사항에 대한 설명(커밋 메시지)을 포함해야 합니다.

4. 이제 로컬 Git 저장소에 변경된 파일이 포함되어 있으므로 이 변경 사항을 GitHub 저장소에 git push
명령을 사용하여 푸시하세요. GitHub 사용자 이름과 암호를 제공해야 하는 대화 상자가 표시될 것입니다.
5. GitHub 사용자 이름과 암호를 제공한 후에는 Git이 아래와 같은 상태 정보를 제공해야 합니다.

풀 요청 제출
이 시점에서는 변경 사항을 요청하려는 GitHub 리포지토리의 사본이 작성되어(포크) 소유자 GitHub 계정에 있는 자체 GitHub 리포지토리에 있습니다. 이제 변경 사항을 소유자 GitHub 리포지토리로 요청하기 위해 풀 리퀘스트를 제출하는 시간입니다.
1. GitHub에서 자체 포크한 리포지토리로 이동하세요.
2. 아래와 같이 Pull Requests를 클릭하고 New pull request를 클릭하세요.

3. 풀 리퀘스트 페이지에서 비교할 두 개의 리포지토리와 소유자의 GitHub 리포지토리에 병합을 요청하는 각 커밋을 볼 수 있습니다. Create pull request를 클릭하세요.

4. 풀 리퀘스트에 제목을 제공하고 Create pull request를 클릭하세요.

그러면 원본 GitHub 리포지토리에 풀 리퀘스트가 표시됩니다. 이 시점에서 작업은 완료되었으며 소유자의 응답을 기다리는 시간입니다.
풀 리퀘스트 검토 및 승인
풀 리퀘스트를 생성하자마자 원본 GitHub 리포지토리의 Pull Request 아래에 표시됩니다.

이 시점에서 소유자는 풀 리퀘스트에 대해 의견을 제공하여 협업할 수도 있습니다. 또는 Merge pull request를 클릭하여 즉시 병합할 수도 있습니다.
소유자가 원본 코드로 풀 리퀘스트를 병합하면 풀 리퀘스트는 Merged 상태로 전환되며 코드가 원본 리포지토리에 병합됩니다!

이제 변경한 파일에 대한 기여자로 등록되고 병합되었음을 확인할 수 있습니다.

결론
이 튜토리얼에서는 Git pull request를 생성하는 방법에 대해 각 단계를 배웠습니다. Pull request는 GitHub 저장소에서 협업하는 훌륭한 방법입니다.
이제 GitHub 프로젝트에 기여하는 방법을 알게 되었으니, 다음으로 기여할 저장소는 무엇일까요?