GitHub는 VCS(Version Control Service)로 많이 사용했다.
하지만 학부생인 현재 형상관리 툴을 제대로 사용하지 못하고 그냥 개인 프로젝트 저장, 기록에만 사용하고 다시 열어보면 어떤 과정이 있었는지 알 수 없었고 심지어 완성이 된 것인지 하다가 그만둔 건지 뭘 했는지 알 수 조차 없는 그런 레포가 되었다... ㅠ
계속 노션으로 관리하면 돼, 다음부터는 관리하는 법을 배워서 프로젝트를 진행하면 돼, 협업할 때 제대로 하면 돼 하며 미뤄왔던 일을 이번에 GitHub에서 제공하는 여러 기능을 공부하면서 정리해보겠다.
이 글은 GitHub Pro버전에서 진행한 것이기 때문에 Pro가 아니면 에러가 발생할 수 있습니다!! (발생 안 할 수도..)
GitHub의 기능을 많이 활용한 Open Source로 사용되는 레포를 예로 보면 Star를 많이 받고 Issue 관리나 Discussion 같은 것이 많이 활성화되어있었다.
GitHub에서 레포를 관리하는 방법인 issue 관리, Pull requests, Discussion, Project 사용 법을 정리한다.
+++ (새로운 레포지토리를 만들어서 작업을 했어야 했는데.. 기존에 간단한 작업을 했었던 레포지토리를 사용했습니다. 보기 불편할 수 있는데 양해 부탁드립니다!! 글을 쓰다가 후회했어요 ㅠ)
- Project
우선 Project 탭에 간 후 New project를 클릭하면 위와 같이 untitled project가 하나 생성될 것입니다.
그렇게 되면 템플릿을 선택할 수 있는데
기본적으로 애자일 방법론을 적용한 Kanban Board를 기반으로 하여 제공을 합니다. 그리고 제공되는 템플릿 중 협업을 생각한 Team backlog를 선택해서 생성합니다.
프로젝트 관리 Board가 생성되었으며 상황에 따라 Table, Board형태로 확인할 수 있습니다.
그리고 아래 보이는 Add item을 통해 작업을 등록할 수 있습니다.
생성한 작업을 클릭하면 위와 같이 이동합니다. 우선 Edit을 이용해서 해야 하는 작업에 대한 설명 혹은 To do list를 작성할 수 있고 MarkDown언어를 사용할 수 있습니다.
현재는 Draft 상태로 레포에 어떤 이슈로 생성되지 않는다. 따라서 자유롭게 프로젝트를 진행하면서 해야 할 일을 마구 적어놓고(Status: New) 회의를 통해 정말 필요한 작업인지 확인한 후 다음 Status로 등록해놓고 구분해나가면 된다.
issue로 등록하고 싶다면 오른쪽 하단의 Convert to issue를 누르면 아래와 같이 변한다.
우선 Draft가 Open으로 바뀌었다. issue가 열렸단 의미. Preview에는 간단하게 To do list를 작성했다.
그리고 오른쪽을 보면, Assignees, Labels, Status, Priority, Size, Repository을 설정할 수 있다.
뜻 그대로의 의미를 나타내니 설명은 생략하겠다..
하나만 보자면 Milestone은 조금 생소할 수 있다. Milestone은 등록해놓은 issue들을 언제까지 기간을 정해서 완료하겠다는 의미로 생성하는 것이다. Milestone은 Repository에 가서 issue에 가면 생성할 수 있다.
다음과 같이 간단하게 생성한 후 Milestone도 추가하였다.
이제 초기 세팅은 끝났다. 어떻게 활용을 해서 내 프로젝트를 관리할 것인지를 작성하겠다.
우선 Backlog에 있던 item을 누가 처리할 것인지와 Priority, Size, Labels 등을 설정했기 때문에 Ready로 이동하고 처리할 인물이 진행을 시작하면 In Progress로 옮기고 완료를 하면 In review로 직접 이동을 시켜놓을 것이다.
이러한 workflow를 자동화시키는 세팅이 있는데, issue가 closed 되거나, pr이 merged 됐을 때는 최소한 Done으로 알아서 이동하게 해 놓을 수 있다. 오른쪽 위의 탭을 누르게 되면 Workflows로 들어올 수 있는데, 나는 item closed와 pr merged의 경우 Done으로 이동할 수 있게 설정했다.
Code changes requested 혹은 Code review approved를 활용하면 In review로도 이동시키는 것을 자동화할 수 있을 것 같다.
이젠 정말 초기 세팅 방법은 끝난 것 같다.. 앞서 처음 만들었던 "할 일을 마구 적어주세요"의 상태를 Draft에서 Issue로 변경했었는데, 이제 issue 기반 프로젝트 관리 방법에 대해 설명하겠다.
프로젝트 관리를 할 때 해야 할 일들을 Kanban board에 정리하고, item에는 하나의 작업만을 정리하여 Ready가 되면 Issue를 만들고 브랜치를 생성해 Issue를 처리한 후 코드의 경우 pr을 보내 issue를 닫아나가며 프로젝트를 진행하면 된다.
문서작업의 경우 검토받을 매니저를 태그 해서 검토하고, Close with completed를 누르면 이슈가 받아들여진 상태로 종료, Close as not planned는 받아들이지 않고 종료하는 형태이다. 여기서는 받아들이고 종료를 누르겠다. 그렇게 되면 Status가 Done으로 이동한다.(Workflow 설정)
Discussions의 경우 settings로 이동해서 Discussion을 활성화시키면 자유롭게 생성할 수 있고 다른 사용자들과 자유롭게 의견을 주고받을 수 있는 기능이다.. Category를 설정하고 의견을 주고받을 일이 있으면 작성하면 되기 때문에 더 정리를 하진 않겠습니다.
이제 PR을 통한 이슈관리를 해보겠다. 사실상 이게 주된 깃 관리 방법인 것 같다
우선은 Project에서 해야 할 작업들을 여럿 추가해보았다.
실제로는 해야할 작업들을 팀원이 분배받고 작업을 하게 되며, Pull Request를 통해 코드가 리뷰되고 합쳐질 텐데 Issue와 관련된 코드 변경은 어떻게 묶이는지를 보면서 이번 포스팅을 마치겠다.
깃 형상관리 GUI 툴은 Git Kraken을 사용했고, Git Kraken을 통한 Git 사용법도 정리하여 추후에 포스팅하겠다.
위에서 정리한 내용을 토대로 Issue를 생성했고 담당자를 나 자신으로 해놨다.
그리고 브랜치를 열어 간단히 READEME를 수정하였고 commit을 생성, push를 날려보겠다. 과정은 생략함
깃 레포로 돌아와 보면 PR을 할 수 있다는 문구가 나타나고 클릭을 하면
Git Kraken에서 작성한 내용이 그대로 작성되어있고 Create pull request를 누르면 된다.
(이 화면에서 Write에 수정을 할 수 있으므로 아래에 나오는 This closes #3을 작성해도 된다. 사실 까먹고 그냥 눌러버렸다..)
closes #3(이슈 번호)를 작성하게 되면 내가 만든 Issue가 나타나며 링크가 걸린다. 그리고 이 PR이 Merged가 되면
Issue가 자동으로 닫혀 이동하게 된다!!
또한 #3에 링크가 걸려있는데 클릭하게 되면 Project로 이동하여 어떤 작업과 연관되어있는 PR이었는지 확인할 수 있기 때문에 관리하기 더 수월해진다.
#3 이슈에 보면 트리 모양의 #4가 생겼는데 #4 이슈에 의해 닫혔다는 것을 의미한다.
따라서, PR에 의해 이슈를 생성할 수 있고, 변경이 허락되어 Merge 하게 되면 그 이슈를 통해 연관된 작업을 문서화해둔 이슈를 닫을 수도 있다!
왜 closes #3이라고 작성하는가? 꼭 closes가 아니어도 된다 이건 깃허브에서 자동화할 수 있도록 만들어준 기능이라고 한다.
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
Linking a pull request to an issue - GitHub Docs
Note: The special keywords in a pull request description are interpreted when the pull request targets the repository's default branch. However, if the PR's base is any other branch, then these keywords are ignored, no links are created and merging the PR
docs.github.com
다음 포스팅은 Git 형상관리 GUI 툴인 Git Kraken에 대해서 더 알아보도록 하겠습니다!
제 개인적인 생각이 들어가면서 정리한 글이기 때문에 문제점, 지적 댓글 주시면 감사합니다!!