web-dev-qa-db-ja.com

git commitメッセージで過去時制または現在時制を使用する必要がありますか?

I 一度だけ読む git commitメッセージは命令形の現在時制でなければなりません。 「xのテストを追加」。私はいつも過去形を使用しています。 「xのテストを追加しました」が、私にとってはもっと自然に感じます。

これは最近のJohn Resigのコミットです 1つのメッセージに2つを表示しています:

操作テストでjQueryセットの結果をさらに調整します。また、予想されるテスト結果の順序を修正しました。

それは重要ですか?どちらを使うべきですか?

471
Skilldrick

現在時制の命令型スタイルのコミットメッセージの好みは、Git自体から来ています。 Gitリポジトリの Documentation/SubmittingPatches から:

命令的な気分の変化を説明してください。 「[このパッチ]がxyzzyをfrotzにする」または「[I] xyzzyをfrotzに変更する」の代わりに「make xyzzy do frotz」、コードベースに動作を変更するように命令する場合。

そのため、そのスタイルで書かれたGitコミットメッセージがたくさん表示されます。チームまたはオープンソースソフトウェアで作業している場合、一貫性を保つために全員がそのスタイルに固執すると役立ちます。あなたがプライベートプロジェクトに取り組んでいて、あなたがあなたのgit履歴を見ることができるのはあなただけだとしても、他の人と一緒に仕事をしているときに評価される良い習慣を確立するため、命令的なムードを使用すると便利です。

521
mipadi

プロジェクトはほぼ常にを使用する必要があります過去時制。いずれにしても、プロジェクトは一貫性と明確性のために常に同じ時制を使用する必要があります。

現在時制を使用することを主張する他の議論のいくつかを理解していますが、それらは通常は適用されません。次の箇条書きは、現在形で書くための一般的な議論と私の応答です。

  • 現在形で書くと、誰かにコミットを適用するとどうなるかがわかります。

これが現在の時制を使用する最も正しい理由ですが、プロジェクトの正しいスタイルでのみです。この考え方では、すべてのコミットをオプションの改善または機能と見なし、特定のリポジトリで保持するコミットと拒否するコミットを自由に決定できます。

この議論は、真に分散したプロジェクトを扱っている場合に有効です。分散プロジェクトを扱っている場合、おそらくオープンソースプロジェクトに取り組んでいるでしょう。そして、それが実際に配布されている場合、おそらく非常に大きなプロジェクトです。実際、おそらくLinuxカーネルまたはGitのいずれかです。 LinuxがGitを広め、人気を獲得した原因である可能性が高いため、人々がなぜそのスタイルを権威と見なすのかを理解するのは簡単です。はい、スタイルはこれらの2つのプロジェクトで理にかなっています。または、一般的に、大規模、オープンソース、分散プロジェクトで動作します。

そうは言っても、ソース管理のほとんどのプロジェクトはこのようには機能しません。通常、ほとんどのリポジトリでは正しくありません。これは、コミットについての現代的な考え方です。Subversion(SVN)およびCVSリポジトリは、このスタイルのリポジトリチェックインをほとんどサポートできませんでした。通常、統合ブランチは不適切なチェックインのフィルタリングを処理しましたが、それらは一般に「オプション」または「便利な機能」とは見なされませんでした。

ほとんどのシナリオでは、ソースリポジトリにコミットするときに、この更新で何が変更されたかを説明するジャーナルエントリを作成し、将来、他の人が変更された理由を理解しやすくします。通常、これはオプションの変更ではありません。プロジェクトの他のユーザーは、マージまたはリベースする必要があります。 「親愛なる日記、今日私meet少年と彼says hello to me。」のような日記エントリを書くのではなく、代わりに「I- met少年と彼saidこんにちは。」

最後に、そのような非分散プロジェクトの場合、人がコミットメッセージを読む時間の99.99%は履歴を読むためです-履歴は過去形で読み込まれます。 0.01%の確率で、このコミットを適用するか、ブランチ/リポジトリに統合するかを決定します。

  • 一貫性。それが多くのプロジェクト(git自体を含む)での方法です。また、コミットを生成するgitツール(git mergeやgit revertなど)も実行します。

いいえ、バージョン管理システムにログインしたプロジェクトの大半が過去形での履歴を持っていることを保証します(参照はありませんが、現在の時制の議論はGit以来新しいことを考えると、おそらく正しいでしょう)。現在の時制での「改訂」メッセージまたはコミットメッセージは、真に分散したプロジェクトでのみ意味を持ち始めました-上記の最初のポイントを参照してください。

  • 人々は「このコードベースに何が起こったのか」を知るために履歴を読むだけでなく、「このコミットをチェリーピックしたときに何が起こるか」、「これらのコミットによりコードベースにどのような新しいことが起こるか」などの質問に答えます将来的には合併する可能性があります」.

最初のポイントを参照してください。人がコミットメッセージを読む時間の99.99%は、履歴を読むためです-履歴は過去形で読まれます。 0.01%の確率で、このコミットを適用するか、ブランチ/リポジトリに統合するかを決定します。 99.99%は0.01%を破りました。

  • それは通常短いです

短いので不適切な時制/文法を使用するという良い議論を見たことはありません。標準の50文字のメッセージでは、おそらく平均で3文字しか保存されません。そうは言っても、現在の時制はおそらく数文字短くなります。

  • 課題/機能トラッカーのチケットのタイトルを使用して、より一貫性のあるコミット名を付けることができます(過去形を使用しませんが、時には未来形を使用します)

チケットは、現在発生しているもの(アプリ表示中このボタンをクリックしたときの間違った動作など)、または今後行う必要があるもの(たとえば、テキスト必要編集者によるレビュー)。

履歴(つまり、コミットメッセージ)は、過去に行われたものとして書き込まれます(たとえば、問題was fixed)。

332
Matt Quigley

65git の詳細な説明を書きました。

命令的な現在形の使用は、少し慣れるのに必要なものです。私がそれについて言及し始めたとき、それは抵抗に会いました。通常、「コミットメッセージは私がしたことを記録します」の行に沿っています。ただし、Gitは分散バージョン管理システムであり、変更を取得できる場所が潜在的に多くあります。自分がやったことを伝えるメッセージを書くのではなく、これらのメッセージを、コミットを適用することの指示として考えてください。タイトルでコミットするのではなく:

Renamed the iVars and removed the common prefix.

このようなものを持っている:

Rename the iVars to remove the common prefix

これは、あなたがしたことではなく、コミットを適用することで誰かに伝えるものです。また、リポジトリの履歴を見ると、Gitで生成されたメッセージもこの時制で記述されていることがわかります。「マージ」ではなく「マージ」、「リベース」ではなく「リベース」であるため、同じ時制で記述すると一貫性が保たれます。最初は奇妙に感じますが、理にかなっており(適用時にお客様の声が利用可能)、最終的には自然になります。

それはすべてあなたのコードであり、リポジトリであるということです。したがって、独自のガイドラインを設定し、それに従ってください。

ただし、この方法で処理することにした場合は、rewordオプションを指定したgit rebase -iを調べることをお勧めします。

76
Abizern

なぜなら、現在の時制に固執するからです

  • 標準があるといい
  • 当然、「何かを実装する」、「何かを修正する」、または「何かをテストする」という形式のバグトラッカーのチケットに一致します。
22
Craig P. Motlin

誰にメッセージを書いていますか?そして、その読者は通常、コミット自体の所有権の前または後のメッセージを読んでいますか?

ここでの良い答えは両方の観点から与えられたと思います。おそらく、すべてのプロジェクトに最適な答えがあることを示唆することはできません。分割投票も同様に示唆するかもしれません。

すなわち要約する:

  • 主に他の人向けのメッセージであり、通常、変更を想定する前のある時点で読んでいます。変更を行うと、既存のコードがどうなるかという提案。

  • メッセージは、主に自分(またはチーム)へのジャーナル/レコードとしてのメッセージですが、通常は変更を想定し、何が起こったかを発見するために検索して戻るという観点から読みます。

どちらにしても、これがチーム/プロジェクトの動機付けになる可能性があります。

15
wardw

それは重要ですか?人々は一般的にメッセージを正しく解釈するのに十分賢く、そうでない場合はおそらくリポジトリにアクセスさせないでください!

10
Michael Baldry

それはあなた次第です。コミットメッセージを使用するだけです。ただし、時間と言語を切り替えないほうが簡単です。

また、チームで開発する場合は、議論して修正する必要があります。

6
Andreas Rehm