모노산달로스의 행보
[Git/Github] 초심자를 위한 실습으로 한번에 끝내는 Github 설명서 본문
학년이 올라가면서 갑작스럽게 다수의 프로젝트를 진행하게 되었습니다. 그러한 과정에서 협업을 이끌어나가는 방법의 중요성이 커지게 되었습니다. 이러한 상황에서 수많은 프로그래머들이 Git과 Github를 사용하고 있습니다.
이번 글에서는 Git을 설치하고 Github의 기본적인 사용방법 그리고 Notion과 연동하는 방법까지 작성해 보겠습니다.
Git은 무엇이고 Github는 무엇인가?
Git의 역할을 정의하자면 Version Control System입니다. Git을 통하여 내가 작성한 코드의 변화를 Repository라는 특별한 공간에 저장할 수 있습니다. 저장될 때마다 History에 기록이 남아 코드를 망치는 경우 쉽게 이전 버전으로 돌아갈 수 있습니다.
만약 이러한 Version Control System이 없다면 어떨까요? 프로그래머들이 직접 각 버전에 해당하는 폴더를 로컬에 만들어서 저장해두어야 합니다. 심지어 여러 명이 함께 작업을 한다면 각자의 로컬 저장소에 각각의 폴더를 만들어야 하고 그것이 올바르게 나누어졌는지 확인하는 것도 힘들어집니다. 또한 코드를 합치는 경우에도 이메일을 통해 전달하는 등 많은 어려움이 생깁니다.
한마디로 Git은 Version Control System으로서 코드의 History를 확인하고 여러 사람이 함께 협업할 수 있도록 도와줍니다.
Github는 유저들의 협업을 도와주는 플랫폼입니다. Github를 이해하기 위해서는 branch가 무엇인지 알아야 합니다.
분기(branch)를 설명하기 위해서 Blue, Green, Orange 세 유저가 협업을 하는 상황을 위와 같이 그림으로 표현해 보았습니다.
먼저 Blue 유저가 협업을 위해 Github에 코드를 올립니다. 여기서 Green이 Blue의 코드를 개선하고 싶다면 어떻게 해야 할까요? 곧바로 Blue가 사용하는 branch에 수정을 하는 것이 아닌 자신만의 branch를 만듭니다. 그리고 수정을 한 다음 pull request를 통해서 자신의 변경 사항을 팀에게 알립니다. Orang 또한 마찬가지로 자신의 branch를 만들어서 코드를 작성하고 pull request를 수행합니다.
마지막으로 팀의 멤버가 모두 pull request를 완료하고 수정된 코드를 확인했다면 Merge pull request를 통해서 Main branch에 합쳐지게 됩니다.
즉, Github를 통해서 유저들은 각자의 branch에서 작업을 수행하고 pull request를 통해서 작업 내용을 알립니다. 그리고 Merge라는 작업을 통해서 코드를 합치게 됩니다.
Github 실습을 통해 알아보기
Git과 Github가 무엇인지 알았으니 이제 실제로 사용해 보면서 기능을 익혀보겠습니다. Repository 생성부터 Branch 나누기 그리고 Pull request와 Merge에 대해서 공부하게 됩니다. 추가적으로 Notion과 연동하는 방법 또한 알아보겠습니다.
아래 내용은 경기대학교 SW중심대학 K-Scrum의 소프트웨어 개발 프로세스의 도움을 받아 작성하였음을 알립니다.
경기대학교 SW중심대학
SW 혁신을 선도하는 K-안전 융합인재 양성하는, 경기대학교 SW중심대학
swuniv.kyonggi.ac.kr
여러 명의 개발자가 계산기 프로그램을 제작하려는 상황을 상정하고 실습을 시작하겠습니다.
Repository 생성하기
먼저 Github의 저장공간인 repository를 생성하면서 실습을 시작하겠습니다.
깃허브 공간 어디에서나 New 버튼을 클릭하여 새로운 Repository를 생성할 수 있습니다.
- Repository name : Repository의 이름을 작성합니다
- Description : Repository의 설명을 작성합니다
- Public / Private : Public으로 설정하면 누구나 해당 Repository를 확인할 수 있습니다. 하지만 수정을 위해서는 Public과 Private 모두 설정이 필요합니다.
- Add a README file : Repository의 얼굴 같은 존재입니다. 초기 생성 시 Repository가 비어있지 않도록 README를 함께 만들 수 있습니다.
- Add. gitignore : Git이 관리하기를 원하지 않는 파일을 지정할 수 있습니다. 해당 파일들은 Git이 더 이상 변화를 Tracking 하지 않습니다.
생성완료 시 위와 같은 화면을 확인할 수 있습니다.
프로젝트 Clone 하기
'복사하다'라는 뜻 그대로 clone은 프로젝트를 로컬 환경으로 가져오는 역할을 수행합니다.
Visual Studio Code와 Github가 연동되어 있다면 손쉽게 Repository를 Clone 하는 것이 가능합니다. Clone Repository를 클릭합니다.
Clone 하여 작업하기를 원하는 Repository를 선택합니다.
그러면 다음과 같이 저장공간을 선택하는 창이 나옵니다. Clone은 Repository의 프로젝트 내용을 전부 자신의 로컬 저장소로 가져오는 것입니다. 따라서 저장 위치를 지정해주어야 합니다.
위와 같이 하나의 폴더를 만들어서 연관된 Repository를 넣어두면 깔끔하게 정리할 수 있습니다.
Clone 한 프로젝트를 Visual Studio Code에서 Open 한 모습입니다. 이제부터 코드를 작성할 수 있게 되었습니다!
Branch를 생성하고 이동하기
하지만 곧바로 작업을 수행해서는 안됩니다. 앞서 Github 개념에서 설명했듯이 먼저 branch를 생성하고 나누어주어야 합니다.
$ git branch [branch name] // branch를 생성합니다
$ git checkout [branch name] // branch를 이동합니다
$ git branch -l // 지금까지 만든 branch의 리스트를 출력합니다
나누어진 Branch에서 작업 수행하기
이제 본격적으로 코드를 작성하고 pull request까지 실습해 보겠습니다. 현재 상황은 아래와 같습니다.
개발자 1은 TC-1이라는 branch에서 계산기의 '빼기(minus)' 기능을 수행하는 함수를 구현하여 Github에 업로드할 것입니다.
앞서 설명한 방법과 마찬가지의 방식으로 진행됩니다. 우선 TC-1이라는 branch를 만들고 이동하였습니다.
그리고 다음과 같이 minus 기능을 수행하는 코드를 작성했습니다. Visual Studio Code의 Source Control 페이지를 클릭하면 Changes에 main.c가 존재하는 것을 확인할 수 있습니다.
지금 발생한 변경사항은 나에게만 적용되는 부분입니다. 이를 다른 팀원과 공유하기 위해서는 로컬 저장소에서 원격 저장소(Github)로 push를 해야 합니다.
변경사항 Push 하기
$ git add [file name] // 변경사항을 staged 상태로 전환합니다. commit을 수행하기 전에 사용해야합니다
$ git commit -m "message" // staged 상태의 변경사항을 git 저장소에 저장합니다. message 부분에 설명을 기입합니다.
$ git push origin [branch] // git 저장소의 변경사항을 Github에 업로드합니다.
$ git pull origin [branch] // Github에 저장된 변경사항을 내 로컬 저장소로 가져옵니다.
*origin은 원격의 라는 뜻으로 쓰입니다. git push origin [branch] -> (origin)[branch]에 내용을 push 합니다.
push를 하기 위해서는 위 그림과 같이 add -> commit -> push라는 과정을 거쳐야 합니다.
add 명령어를 통해서 main.c 를 staged 상태로 변경했습니다. 만약 모든 변경사항을 add 하기를 원한다면 git add. 을 입력하면 됩니다.
이제 변경사항을 commit 할 차례입니다. message의 내용은 자유롭지만 보통은 자신이 변경한 내용이 무엇인지 다른 팀원에게 알리는 목적으로 작성됩니다.
명령어를 실행하면 Staged 상태였던 main.c가 Outgoing으로 이동한 것을 확인할 수 있습니다.
push 명령어를 통해 변경사항을 Github에 업로드합니다.
Github Repository에서 위와 같이 Push가 되었음을 알리는 메시지를 확인할 수 있습니다. 이제 업로드된 변경사항을 Compare & pull request 버튼을 눌러 앞서 만든 sprint branch에 변경사항을 적용을 요청하겠습니다.
가장 먼저 확인할 것은 branch를 선택하는 것입니다. 위 사진에서 sprint <- TC-1으로 선택되어 있는 것을 확인가능합니다. 아래에서는 변경된 코드를 확인할 수 있습니다. 추가된 구절은 +로 표시됩니다.
이제 sprint branch를 관리하는 매니저는 pull request의 내용을 확인합니다. 개발자 1이 minus 기능을 구현하였다는 것을 확인하고 merge를 confirm 합니다.
이제 sprint branch로 이동하면 변경사항이 적용되었다는 것을 확인가능합니다. 다만, 이번에도 Github에서 sprint에 변경사항이 있으니 pull request를 수행하라는 메시지를 띄워줍니다. Default로 설정된 main barnch에 모든 변경사항이 merge 되어야 하나의 큰 작업이 끝나는 것이기 때문입니다.
하지만 아직 main branch에 변경사항을 적용하지 않을 것입니다. 최종적으로 진행되는 merge는 항상 신중을 기울여서 진행해야 합니다. 빼기 기능을 추가하는 것과 같은 방법으로 더하기 기능을 추가해 본 뒤 main branch에 접근해 보겠습니다.
변경사항 Pull 하기
현재까지 상황은 아래와 같습니다.
개발자 1은 TC-1 branch에서 '빼기(minus)' 기능을 구현하여 Github에 업로드하였습니다. sprint branch에 pull request를 요청하였고 최종적으로 변경사항이 sprint branch에도 적용되었습니다.
개발자 2는 이러한 상황에서 '더하기(plus)' 기능을 작업하려고 합니다. 어떻게 하면 좋을까요?
우선적으로 해야 하는 일은 Github에 적용되었는 최신 버전의 프로젝트를 받아오는 것입니다. 개발자 2가 개발자 1이 구현한 '빼기(minus)'를 미처 확인하지 못하고 작업을 하게 된다면 어떨까요? 개발자 2가 작업을 끝내고 sprint에 merge 하는 과정에서 파일의 충돌이 발생하게 될 것입니다. 개발자 2가 작업한 내용에는 '빼기(minus)'를 구현한 코드는 존재하지 않기 때문입니다.
이제 앞서 '빼기(minus)'를 실습하는 과정과 동일한 방식으로 '더하기(plus)'를 push 합니다.
Main branch에 merge 하기
이제 마지막 과정입니다. 개발자 3은 앞서했던 방법과 마찬가지로 sprint로부터 Pull을 받아 프로젝트를 업데이트합니다. 이후 TC-5 branch를 만들어 코드를 작성합니다.
TC-5의 변경사항까지 모두 sprint에 merge되었습니다. 이제 sprint branch에서 main branch로 모든 변경사항을 적용할 차례입니다. 지금까지 했던 방식과 동일하게 sprint에서 main으로 pull request를 요청합니다.
지금까지 진행했던 모든 pull request와 merge의 history가 확인됩니다.
이제 모든 과정이 끝이 났습니다. main branch에 지금까지 업로드된 변경사항이 전부 적용되었습니다.
Insights -> Network 로 이동하면 지금까지 했던 과정을 그래프를 통해서 쉽게 확인이 가능합니다.
Notion과 Github 연동하여 작업 관리하기
지금까지 했던 Github를 사용하는 것은 팀원 간의 원활한 소통을 전제로 하고 있습니다. 모두 자신이 어떤 일을 해야 하는지, 남은 일은 무엇인지 작업 상황은 어떠한지 인지하고 있다면 협업 효율이 상승하게 됩니다.
이를 위해서 Notion을 Github작업과 연동해서 사용하는 방법을 고려해 볼 수 있습니다.
Notion 템플릿 복사하기
가장 먼저 해야 할 일은 노션에 접속해서 비어있는 Workspace를 만드는 것입니다.
빈 공간에 /github를 작성하면 Synced Databases에 Github가 나타납니다. 클릭하면 아래와 같은 테이블이 만들어집니다.
원하는 Repository를 선택하여 연결합니다. 여기서는 practice-week-2 PRs(pull request)를 선택했습니다. 해당 테이블을 팀 프로젝트의 pull request를 한눈에 정리하여 관리할 수 있습니다.
다음으로 테이블을 통해 구체적으로 개발자가 수행할 지시사항을 작성합니다. '빼기(minus)' 기능을 구현하는 경우 진행 예정에 있는 Block을 진행 중으로 드래그하여 옮깁니다.
이를 통해 현재 작업 중인 기능이 무엇인지, 남은 작업은 무엇인지, 완료한 작업은 무엇인지를 한눈에 확인이 가능합니다.
그리고 빼기 기능 구현 Block을 클릭하면 상세 정보를 수정할 수 있습니다. Add a property를 누른 뒤 Relation(관계형)을 검색합니다.
관계형을 선택하면 위와 같이 앞서 Github PR에 생성한 Database가 나타납니다.
Relation을 추가하여 pull request를 확인할 수 있도록 만듭니다.
이제 추가한 property의 Empty 부분을 클릭하면 위와 같이 해당하는 pull request를 선택할 수 있습니다. 즉, 진행 중인 작업 block과 pull request를 연결하여 현재 작업 중인 코드를 즉시 확인할 수 있도록 하는 것입니다.
*pull request가 연동되는 속도가 느려 바로 나타나지 않으므로 느긋하게 기다려야합니다.
DB에서 확인되는 내용은 위와 같습니다. TC-2와 TC-1은 pull request와 merge가 완료되었음을 확인할 수 있습니다. TC-5가 요청한 pull request는 아직 검토 중인 상황으로 확인됩니다.
깃 깃허브 노션 Git Github Notion