AngularJS에서 사용(했던) Git Commit Convention #8
gabrielyoon7
started this conversation in
4. 잡담
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
프로젝트와 직접적인 관련이 있는 것 같지는 않아서 Issue로 등록하기는 뭐하고,
그냥 잡담 게시판에 주저리 주저리 글을 적어봤습니다.
Git Commit Convention?
Git에서 Commit을 보낼 때 어떤 기준으로 해야 할까요?
사실 정답은 없습니다.
프로젝트마다 규칙도 다르고, 반드시 따라야 하는 명확한 기준이 없기 때문입니다.
다음은 Angular JS에서 정의한 Git commit 규약으로, 전세계에서 가장 범용적으로 사용되는 commit 규칙 중 하나 이니 참고해보시길 바랍니다.
AngularJS Git Commit Message Conventions
사용했던 이라고 강조한 이유는 일부 표기법이 더 세분화되었기 때문인데, 아직도 많은 사람들이 위 규칙을 따르고 있어 소개해봅니다.
*CS-HOME에 이 규칙을 반드시 적용하라는 의미는 절대 아닙니다. 모든 판단은 여러분이 스스로 하시면 됩니다.
이후에 여러분들이 진행하는 프로젝트에서 사용할 법한 유용한 문서를 소개 해드리는 것 입니다.
위 글에서 중요한 부분을 번역 및 첨언 하여 아래에 소개해드리겠습니다.
Commit Message를 작성하는 법
Commit Message 양식
커밋 메시지는 *1줄*에 100글자를 넘을 수 없습니다.
헤더
<type>
자리에 올 수 있는 것<scope>
자리에 올 수 있는 것commit 위치를 지정하는 모든 것이 될 수 있습니다.
어떤 commit인지 더욱 강조할 때 쓴다고 생각하시면 됩니다.
예를 들면 $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView, etc... 과 같이 특정 기능이나 위치의 커밋임을 강조합니다.
단, 이 부분은 선택사항 입니다. 적지 않아도 됩니다. 프로젝트마다 규칙이 다를 수 있습니다.
<subject>
자리에 올 수 있는 것특히 첫 제목은 한 줄로 누구나 알아보기 쉽게 간결하게 적습니다.
그래야 나중에 commit 이력을 분석할 때 유용합니다.
본문
<body>
자리에 올 수 있는 것단, 이 부분은 선택사항 입니다. 적지 않아도 됩니다. 프로젝트마다 규칙이 다를 수 있습니다.
바닥
BREAKING CHANGE
변경 사항이 중대한 경우에 표기합니다.
예를 들면, 어떤 기능이 굉장히 범용적으로 사용되고 있는데, 갑자기 수정해야 하는 경우에는 위와 같이 표기합니다.
물론 이렇게 하는 이유는 다른 사람들의 혼동을 줄이기 위함입니다.
단, 이 부분은 선택사항 입니다. 적지 않아도 됩니다. 프로젝트마다 규칙이 다를 수 있습니다.
Commit Message 예제
Commit의 단위?
제가 듣기로는 이번 8기는 Commit을 일주일에 2번 이상 해야 한다고 들었는데, 사실 Commit은 여러분이 생각하는 것 보다 더 잘게 쪼개서 해야 합니다.
그 이유에 대해서는 후술하겠지만, 간단히 말하자면 Commit 이력만 보고도 여러분이 무슨 짓을 했는지 다른 사람들이 알 수 있어야 합니다.
보통은 기능 단위로 잘게 쪼개서 Commit을 날리며, Commit을 날릴 때마다 Commit Message를 같이 작성합니다.
기능의 단위는 어떻게 정의할 수 있을까요? 또, 어떻게 기능을 잘게 쪼갤 수 있을까요?
예를 들면 로그인 기능을 구현해야 한다고 가정할 때, 대부분의 사람들이 이렇게 Commit을 날릴 것입니다.
이 Commit Message가 궁금해진 다른 사람이 해당 변경 사항(코드)을 조회해봅니다.
변경된 코드를 보니
가 작성되어있습니다.
하지만, 기능 단위로 Commit을 날린다면 다음과 같이 날릴 수 있을 것입니다.
위에 구현된 변경 코드들을 다 쪼개서 Commit하면 됩니다.
벌써 4개의 Commit이 작성되었습니다.
만약에 작업하면서 수정할 사항이 생긴다면
이런식으로 더 많은 Commit이 발생할 것입니다.
근데 왜 이렇게 잘게 쪼개야 하냐구요?
사람들이 Commit Message를 이렇게 관리하는 이유
여러분이 지금 IntelliJ에서 작업하시면서 터미널을 직접 조작하실 일이 거의 없겠지만,
작업하시는 폴더를 CMD에서 접근하신 후, 다음과 같은 명령어를 입력하시면 이유를 간접적으로 아실 수 있습니다.
(last release는 최신 커밋 고유 번호를 입력하시면 될 것입니다)
이런식으로 입력을 해보시면 CMD창에 여러분이 입력하셨던 커밋 중, feat에 해당하는 커밋 만 모아볼 수 있습니다.
즉, 누가 어떤 기능 작업을 했는지 더욱 세밀하고 명확하고 책임을 줄 수 있다는 의미 입니다.
어떤 커밋에서 어떤 코드가 수정되었는지 더욱 정확하게 알 수 있게 됩니다.
커밋 이력을 볼 때 훨씬 깔끔하게 정리해서 조회를 할 수 있습니다.
결정적으로, 이 프로젝트에서 사용할 일은 없겠지만, 스크립트로 CHANGELOG.md를 생성하는 기능에도 활용할 수 있습니다.
여러분이 어떤 변경을 했을 때 변경 사항을 자동으로 마크다운으로 정리하여 패치 내역을 만들 수도 있다는 것 입니다.
결국 이 것도 사람이 하는 일이기에, 협업을 자동화 하기 위해서 등장한 기술임을 잊지 않으시면
왜 git의 commit을 이렇게 까지 규약을 만들어가면서 지키시는지 알 수 있을 것입니다.
방금 설명드린 git에 대해서 더 많은 정보를 알고 싶으시다면 이 글에서 참고하시면 됩니다.
커밋 메시지 분리를 위한 팁
여러분이 작업하시는 프로젝트에 docs 폴더를 하나 추가하시고, 기능 목록을 관리할 md 파일을 하나 추가해보세요.
이 파일은 기능 목록을 관리하는 파일로, 특정 기능을 구현하기 전에 계획하거나 수행 여부 등을 기록하는 곳 입니다.
예를 들면
과 같이 체크를 하면서 하면 해야할 일의 계획과 기록을 다같이 할 수 있을 것입니다.
(체크 안된 마크 다운은
-[ ]
입니다.)(체크 된 마크 다운은
-[x]
입니다.)이만 글을 마치겠습니다.
긴 글 읽어주셔서 감사합니다.
Beta Was this translation helpful? Give feedback.
All reactions