git commit 메시지에 과거 또는 현재 시제를 사용해야합니까? [닫은]


531

나는 한 번 읽어 그 자식 "X에 대한 테스트를 추가"예를 들어, 메시지가 필수적 현재 시제에 있어야 커밋합니다. 예를 들어 "x에 대한 추가 테스트"와 같은 과거 시제를 사용하는 것이 항상 나에게는 더 자연 스럽습니다.

다음은 최근 John Resig 커밋 이 두 메시지를 하나로 보여줍니다.

조작 테스트에서 더 많은 jQuery 세트 결과를 조정하십시오. 또한 예상되는 테스트 결과의 순서를 수정했습니다.

그게 그렇게 중요한 건가? 어느 것을 사용해야합니까?


12
따라서이 질문 은 주로 의견 기반으로 마감해야합니다 . 명령형과거 시제 사이의 의견 차이를 이미 살펴보십시오 ! 즉, 나는 명령 시제에 투표합니다. 그것은 역사를 다시 쓰거나, 체리 따기, 패치를 적용 할 때 무엇을하고 있는지 명확히하는 데 도움이되기 때문입니다!




3
@Eonil 의견에 근거하여 폐쇄 된 경우 의견에 근거하여 폐쇄됩니다.
ratchet freak

답변:


601

현재 시제, 명령형 커밋 메시지에 대한 선호는 Git 자체에서 온다. 에서 문서 / SubmittingPatches에 망할 놈의는 REPO :

코드베이스에 변경 명령을 내리는 것처럼 "[이 패치는 xyzzy를 frotz로 만듭니다."또는 "[I] xyzzy를 frotz로 변경했습니다"대신에 "xyzzy를 frotz로 만들기"와 같은 명령적인 분위기의 변화를 설명하십시오. 행동.

따라서 그 스타일로 작성된 많은 Git 커밋 메시지를 볼 수 있습니다. 팀이나 오픈 소스 소프트웨어에서 작업하는 경우 모든 사람이 일관성을 유지하기 위해 해당 스타일을 고수하면 도움이됩니다. 개인 프로젝트를 진행 중이고 git history를 볼 수있는 유일한 사람이더라도 다른 사람과 함께 일할 때 좋은 습관을 기르기 때문에 명령적인 분위기를 사용하는 것이 도움이됩니다.


90
나는 이것이 훌륭한 선택이라고 생각합니다. 커밋이 무엇인지에 대해 다른 형태로 생각하십시오 : 이전 상태에서 새로운 상태로가는 방법에 대한 일련의 지침. diff가 "여기에이 행을 추가하십시오. 여기에서이 행을 제거하십시오"라고 표시된 것처럼, 커밋 메시지는 "이 변경을 수행합니다"라는 질적 인 용어로 말합니다. (예, git은 커밋을 메타 데이터가있는 트리로 간단히 저장하지만 커밋의 중요한 부분은 diff입니다.)
Cascabel

124
커밋을 이전 상태에서 새 상태로 전환하는 방법에 대한 지침 세트로 볼 수 있습니다. 그러나 나는 그것을 코드의 진화에서 체크 포인트로 본다. 저에게 커밋 메시지는 이전 커밋 이후 코드에서 수행 된 작업에 대한 로그입니다. 로그의 경우 과거 시제가 훨씬 더 의미가 있습니다. 커밋 메시지가 일련의 명령이어야한다고 생각한다면 명령형 시제를 사용해야합니다. 난 그냥 그렇게 생각하지 않습니다.
karadoc

10
@oschrenk : 파일의 이후 버전은 다음과 같은 이유를 제시했습니다. ', 코드베이스에 동작을 변경하라는 명령을 내리는 것처럼 보입니다. "
mipadi

44
커밋 메시지는 git you 또는 다른 누군가가 끝내 rebase거나 cherry-pick그 경우 커밋이 원래 컨텍스트 외부에서 사용될 수 있기 때문에 시제 적이어야합니다 . 결과적으로 커밋 메시지는 독자가 주변 커밋 메시지를 보지 않아도 독립형으로 작성되어야합니다. 체리 따기 패치를 선택할 때는 "Fixed bug # 124"또는 "Modified sorting"을 사용하는 대신 "Fix quicksort algorithm"또는 "Sorting : 성능 개선"을 적용하는 것이 더 합리적입니다.
Mikko Rantalainen

5
내가 이것에 대해 생각하는 방식은이 커밋을 내 지점에 적용하기로 선택하면 메시지가 어떻게 변할 것인지 알려주는 것입니다. 나는 그것을 로그로 생각하지 않지만 내가 움직일 수있는 상태로 생각하며 특정 상태를 선택할 때 어떤 일이 일어날 지 알아야합니다.
steinybot 2011

357

프로젝트는 거의 항상 과거 시제를 사용해야합니다 . 어쨌든 프로젝트는 일관성과 명확성을 위해 항상 동일한 시제를 사용해야합니다.

나는 현재 시제를 사용한다고 주장하는 다른 주장 중 일부를 이해하지만 일반적으로 적용되지는 않습니다. 다음 글 머리 기호는 현재 시제로 쓰는 일반적인 주장과 내 대답입니다.

  • 현재 시제로 글을 쓰면 커밋을 적용하는 것이 당신이 한 일이 아니라 무엇을 할 것인지 말해줍니다 .

이것이 현재 시제를 사용하려는 가장 정확한 이유이지만 올바른 스타일의 프로젝트에서만 사용됩니다. 이러한 사고 방식은 모든 커밋을 선택적 개선 사항 또는 기능으로 간주하며 특정 리포지토리에서 유지할 커밋과 거부 할 커밋을 자유롭게 결정할 수 있습니다.

이 주장은 진정으로 분산 된 프로젝트를 다루는 경우에 효과적입니다. 분산 프로젝트를 다루는 경우 아마도 오픈 소스 프로젝트를 진행하고있을 것입니다. 그리고 실제로 배포된다면 아마도 매우 큰 프로젝트 일 것입니다. 사실, 아마도 리눅스 커널이거나 Git 일 것입니다. 리눅스는 Git이 널리 퍼져 인기를 얻었을 가능성이 높기 때문에 사람들이 왜 자신의 스타일을 권위라고 생각하는지 쉽게 이해할 수 있습니다. 예, 스타일은이 두 프로젝트에 적합합니다. 또는 일반적으로 대규모 오픈 소스 분산 프로젝트 에서 작동 합니다.

즉, 소스 제어의 대부분의 프로젝트는 이와 같이 작동하지 않습니다. 대부분의 리포지토리에는 일반적으로 올바르지 않습니다. 커밋에 대한 현대적인 생각입니다. Subversion (SVN) 및 CVS 리포지토리는 이러한 유형의 리포지토리 체크인을 거의 지원할 수 없습니다. 일반적으로 통합 지점에서는 잘못된 체크인 필터링을 처리했지만 일반적으로 "선택적"또는 "사용하기 편리한 기능"으로 간주되지 않았습니다.

대부분의 시나리오에서 소스 리포지토리에 커밋 할 때이 업데이트로 변경된 사항을 설명하는 저널 항목을 작성하여 향후 다른 사람이 변경 이유를 더 쉽게 이해할 수 있도록합니다. 일반적으로 선택적인 변경 사항이 아닙니다. 프로젝트의 다른 사람들이 병합하거나 리베이스해야합니다. 당신은 같은 일기 항목을 쓰지 않는다 "친애하는 일기, 오늘은 충족 소년 그는 말한다 나에게 인사를."대신 당신은 쓰기 "내가 만난 소년과 그가 말했다 나에게 안녕하세요."

마지막으로 이러한 비 분배 프로젝트의 경우 커밋 메시지를 읽는 사람의 99.99 %가 기록을 읽는 것입니다. 기록은 과거 시제로 읽습니다. 이 커밋을 적용해야하는지 또는 지사 / 저장소에 통합해야하는지 여부를 결정할 시간의 0.01 %

  • 일관성. 그것이 많은 프로젝트 (git 자체 포함)에있는 방법입니다. 또한 커밋을 생성하는 git 툴 (git merge 또는 git revert)이 수행합니다.

아니요, 버전 제어 시스템에 로그인 한 대부분의 프로젝트가 과거 시제에서 과거의 역사를 가지고 있음을 보증합니다 (참조가 없지만 현재 시제 주장이 Git 이후 새롭다는 것을 고려하면 옳습니다). 현재 시제에서 "개정"메시지 또는 커밋 메시지는 실제로 분산 된 프로젝트에서만 의미가 있습니다. 위의 첫 번째 요점을 참조하십시오.

  • 사람들은 "이 코드베이스에 무슨 일이 있었는지", "이 커밋을 고르면 어떻게 될까"또는 "이 커밋으로 인해 코드베이스에 어떤 새로운 일이 일어날 지"와 같은 질문에 답하기 위해 역사를 읽습니다. 나는 미래에 합병 될 수도 있고 그렇지 않을 수도 있습니다. "

첫 번째 요점을 참조하십시오. 커밋 메시지를 읽는 사람의 99.99 %가 기록을 읽는 것입니다. 기록은 과거 시제로 읽습니다. 이 커밋을 적용해야하는지 또는 지사 / 저장소에 통합해야하는지 여부를 결정할 시간의 0.01 % 99.99 %가 0.01 %를 이겼습니다.

  • 일반적으로 더 짧습니다

부적절한 시제 / 문법을 사용하는 것이 더 짧기 때문에 좋은 주장을 본 적이 없습니다. 표준 50 자 메시지에 대해 평균 3 자만 저장합니다. 즉, 현재 시제 평균은 아마도 몇 글자 더 짧을 것입니다.

  • 이슈 / 피처 추적기의 티켓 제목으로 커밋 이름을보다 일관되게 지정할 수 있습니다.

티켓은 중 현재 (예 : 앱에서 일어나고있는 무언가로 작성된 보여주는 I이 버튼을 클릭하면 잘못된 동작을), 또는 요구 사항 (예 : 텍스트가 미래에 할 수있는 뭔가 가 필요합니다 에디터에 의한 리뷰).

히스토리 (예 : 커밋 메시지)는 과거에 수행 된 것으로 작성됩니다 (예 : 문제 수정되었습니다).


79
나는 오늘 처음으로 명령형 스타일 커밋을 선호한다고 들었습니다. 나에게는 너무 부자연스럽고 기괴한 소리가 들려서 더 많은 의견을 구하기로 결정했습니다. 나는 과거 시제가 커밋 메시지에 대해 더 자연스러운 것이라고 생각하는 유일한 사람이 아니라는 것을 기쁘게 생각합니다. :)
karadoc

56
git의 자동으로 생성 된 병합 및 리베이스 커밋 메시지는 필수적이며 현재 시제 ( "병합"이 아닌 "병합"; "리베이스"가 아닌 "리베이스")이므로 일관성을 위해 자체 커밋 메시지에서이를 일치시킬 수 있습니다.
mjs

13
차이가에 변화에 초점을 사이 것 같다 소프트웨어 "Y를 수행하여 고정 X"- - 또는 저장소 - "수정 X.을 어떻게 Y" 좋은 주장은 +1이지만, 레포는 일반적으로 결과 소프트웨어보다는 자체에 초점을 맞춰야한다고 생각합니다.
l0b0

28
문제는 명령형을 사용하여 거대한 프로젝트 (예 : Linux)에 대한 시제 효과가 있으므로 분명히 확장됩니다. 또한 과거 시제를 사용하여 거의 제로 노력이 필요합니다. 결과적으로, 나는 "고령자들이 과거 시제로 커밋 메시지를 작성하는 데 사용 된 것"이외의 다른 이유를 보지 못합니다. git 명령 세트를 배울 수 있다면 명령형 시제로 글쓰기를 배울 수 있습니다.
Mikko Rantalainen

35
명령은 "git since new"가 아닙니다. 변경 로그는 git 이전에 존재했으며 GNU 프로젝트에서 명령 사용은 항상 권장되는 스타일이었습니다. gnu.org/prep/standards/html_node/Style-of-Change-Logs.html
adl

81

365git 에 대한 자세한 설명을 작성했습니다 .

명령형, 현재 시제 사용은 약간 익숙해집니다. 내가 그것을 언급하기 시작했을 때, 그것은 저항에 부딪쳤다. 일반적으로“커밋 메시지는 내가 한 일을 기록합니다. 그러나 Git은 변경 가능한 여러 곳이있는 분산 버전 제어 시스템입니다. 당신이 한 일을 말하는 메시지를 쓰는 것이 아니라; 커밋을 적용하는 방법에 대한 지침으로 이러한 메시지를 고려하십시오. 제목으로 커밋하는 대신 :

Renamed the iVars and removed the common prefix.

다음과 같이하십시오 :

Rename the iVars to remove the common prefix

어느 쪽이 당신이 한 것이 아닌 커밋을 적용 할 것인지 알려줍니다. 또한 리포지토리 기록을 보면 Git 생성 메시지가이 시제에도 기록되어 있음을 알 수 있습니다. "병합"이 아닌 "병합", "재 기반"이 아닌 "리베이스"가 동일하므로 동일한 시제로 작성하면 일관성이 유지됩니다. 처음에는 이상하게 느껴지지만 (적용시 사용 가능한 평가) 의미가 있으며 결국 자연스럽게됩니다.

모든 것을 말했듯이 그것은 코드와 저장소입니다. 따라서 자체 지침을 설정하고 준수하십시오.

그러나 이런 식으로 가기로 결정 git rebase -i했다면 reword 옵션을 사용하는 것이 좋습니다.


7
글쎄, 당신은 Git 오픈 소스 프로젝트와 Git의 정기 사용이라는 두 가지 다른 지침을 섞었다. 제공된 링크 에는 시제가 전혀 언급되어 있지 않습니다 . 공식 Git 문서에는 50 자 제한 만 언급되어 있습니다. Git은 변경 사항을 가져올 수있는 많은 장소가있는 분산 VCS입니다 ... 커밋 적용에 대한 지침으로 이러한 메시지를 고려하십시오. 이것은 실제로 배포 된 프로젝트 인 일부 프로젝트에만 적용됩니다. Git 커밋의 99.999 %는 이러한 방식으로 수동으로 적용되지 않습니다. 대부분의 프로젝트에서 히스토리는 변경 시제이며 과거 시제 여야합니다.
매트 Quigley

4
"완전히 멈추어야한다"
takeshin

30

현재 시제 명령에 충실

  • 표준을 갖는 것이 좋다
  • 버그 추적기의 티켓과 자연스럽게 "구현물", "수정 물"또는 "무언가 테스트"형식으로되어 있습니다.

16

당신은 누구를 위해 메시지를 쓰고 있습니까? 그리고 독자는 일반적으로 소유권 이전 또는 사후 소유권 메시지를 커밋 자체로 읽는가?

나는 여기에 좋은 대답이 두 가지 관점에서 주어 졌다고 생각합니다. 어쩌면 모든 프로젝트에 가장 적합한 대답이 있다고 제안하는 데 부족할 것입니다. 분할 투표는 많은 제안을 할 수 있습니다.

즉 요약하면 :

  • 다른 사람들에게 주로 전하는 메시지입니까? 일반적으로 변경을 가정하기 전에 어느 시점에서 읽습니다. 변경을 수행하는 것이 기존 코드에 어떤 영향을 미치는지 제안합니다.

  • 메시지는 주로 자신 (또는 팀)에게 저널 / 레코드로 표시되지만 일반적으로 변경 사항을 가정하고 발생한 내용을 발견하기 위해 다시 검색한다는 관점에서 읽습니다.

아마도 이것은 팀 / 프로젝트에 대한 동기를 어느 쪽이든 이끌어 줄 것입니다.


10

그게 그렇게 중요한 건가? 사람들은 일반적으로 메시지를 올바르게 해석하기에 충분히 똑똑합니다.


27
어떤 사람들은 , 그 문제에 꽤 같은 것들.
웨슬리 머치

2
@mog 링크는 현재와 과거에 대해 언급하지 않습니다.
14시 49 분

2
프로젝트가 대규모로 확장되면 코드 검토 및 버그 사냥을 수행하는 사람들이 너무 많은 커밋을 보게되어 귀하와 내가 제공 할 수있는 모든 도움이 필요합니다. 앞으로 적절한 커밋 메시지를 작성하지 않아 심각한 두통을 유발하기 위해 몇 초를 절약 할 필요가 없습니다.
Mikko Rantalainen

나는 좋은 커밋 메시지를 쓰지 않는다고 말하는 것이 아닙니다. 과거 또는 현재 시제를 사용하더라도 중요하지 않습니다.
Michael Baldry

1
커밋 메시지를 해석 할 수없는 사람이 해당 사용자의 능력이 부족하거나 좋은 커밋 메시지를 작성할 수없는 이유를 어떻게 알 수 있습니까?
Haris

7

너하기에 달렸다. 커밋 메시지를 원하는대로 사용하십시오. 그러나 시간과 언어를 바꾸지 않으면 더 쉽습니다.

팀에서 개발하는 경우 논의하고 수정해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.