하나의 커밋은 하나의 작업 단위라고 보통 말하는데 여기서 말하는 '작업 단위' 라는 말이 애매합니다. 그래서 하나의 커밋을 만들고 나서 아래와 같은 잣대를 이용해보면 좋은것 같습니다.
a. 하나의 기능만 추가되었나? (기능적, 논리적)
b. 커밋을 누군가에게 설명 할 때 명백하게 설명할 수 있는 단위인가? (너무 크다면 리뷰어가 상당히 힘들어합니다. 설명도 어렵고)
c. 독립적으로 빌드는 되는가? (예. b 라는 커밋을 빌드하려면 a도 필요합니다. a-b 라면 a와 b를 합친다)
d. 독립적으로 작동은 하는가?
e. 테스트에 문제를 주지 않는가?
예전에 AOSP (Android Open Source Project) Gerrit 에 모 전자회사에서 커밋을 하나 했는데 그 커밋 안에는
- 총 네 줄의 변경사항이 들어있었음
- 위에 있는 두 줄은 a라는 기능, 아래 있는 두 줄은 b 라는 기능이였음
- 구글에서는 커밋을 둘로 나누고 다시 테스트 해서 올리라고 함
위와 같은 예도 있었습니다.
2013년 5월 8일 수요일 오전 12시 19분 3초 UTC+9, Brian Moon 님의 말:
동영상 중간에 수천개의 파일을 변경한 후 add, commit 한 사례를 이야기 했습니다. 한꺼번에 많은 파일을 변경하고 하나의 커밋으로 처리하는 방식이 좋지 않음은 직관적으로 이해가 됩니다. 통상 하나의 커밋안에 변경된 파일의 수는 얼만큼으로 관리하는 것이 효과적인지 궁금하네요.