web-dev-qa-db-ja.com

git / other VCS-どのくらいの頻度でコミットしますか?

私は11年以上プログラマーとして働いており、実際にバージョン管理を始めようとしています。私が働いた場所では、バージョン管理を実際に使用したことがありません(1日の終わりに1つコミットし、他の1つは単に気にしていません)。

私がバージョン管理について教えてきた方法(programme.js、programme.js.bak、programme.js.bak.20110901など)に満足していないため、gitを使用するように指導しています。

現在、githubと一緒に使用して、4つのマシン間で.vimrcファイルを最新の状態に保ちますが、変更をコミットと見なす必要があるのか​​、それが別のコミットと一緒に含める必要がある変更であるのかはわかりません。私もJavaScriptの開発にそれを使用し始めて、それが非常に便利だと思いました:)

私の質問は次のとおりです。どの時点で変更はコミットになりますか?私が言ったように、バージョン管理を使用した私のために働いた唯一の会社は結局それをしました-これは私には分からないようです。もっとアトミックなはずだと思います。しかし、私の質問は方法原子ですか?

関数のバグ修正はコミットに十分ですか? 3つの(無関係な)関数を修正して、一度にコミットする必要がありますか? ifステートメントの条件を変更した後でコミットする必要がありますか?

個人的なプロジェクトでは、変更後にコミットします。個人的には便利だと思いますが、それが悪い習慣なのか迷惑なのかはわかりません。

あなたはそれをどのように行うのか、業界はそれをどのように行うのか、そしてベストプラクティスは何ですか?

(私はWeb開発者なので、短いプロジェクト(おそらく1か月間)に取り組みます)

24
iblamefish

個々の変更は1つのコミットである必要があります。考慮すべきいくつかのこと:

  • コミットしたことは、ロールバックできることを意味します。実行する必要があるより大きなタスクがあるとします。これで50%完了です。これまでのところ、その部分は良さそうです。次に続けて、何か間違いによって何かを大規模に壊します。間にコミットがあると、そこに戻ることができ、すべての作業が失われることはありませんでした。
  • バージョン管理は、データをダンプして忘れる場所ではありません。バージョン管理は履歴を提供します。後で、私のお気に入りの注釈機能を含む履歴を使用して、なぜ変更が行われたか(そして誰が責任を持っているか)を把握できます。しかし、適切に機能するためには、変化は小さく、自己完結的でなければなりません。
  • チームで作業する場合、それをレビューしてもらうのは素晴らしいことです(実際には一人で作業しているときでも、これは素晴らしいことです;-))。レビューには、無関係な変更の間に混在することなくレビューできる小さなパーツがあるとよいでしょう。

特にgitを見ると、gitはローカルコミットを許可しますが、他を害することはありません。そのため、壊れたコードをローカルでコミットし、プッシュする前に後でコミットすることで修正することもできます。 git開発者は、コミット操作がどれほど速く動作するかを誇りに思っています。そのため、ローカルでコミットするだけでは、実際に開発プロセスが中断されることはありません。 Gitはコミットの書き換えも許可しているため、これらの2つ(またはそれ以上)のコミットはプッシュされる前に1つに書き直される可能性があり、レビューを容易にする可能性があります。

16
johannes

Gitについては、できるだけ頻繁にコミットする必要があると思います。成功したコンパイルをすべてコミットする人もいます。コミットとプッシュを混同しないでください。ローカルコミットをプッシュする必要はありません(安価なため、gitでは多くのブランチを使用する必要があります)。

これはすべきのルールですが、一部のSCMはこのようなルールには遅すぎます。

個人的には、SVNを使用する場合、1日に数回コミットしようとしますが、コードが良好な状態(つまり、すべてのテストをコンパイルして合格)であると確信している場合のみです。

22
Oded

コミットに含めることができる単一の新しい機能/関数/バグ修正/改善を明確に説明するコミットメッセージを書くことができるときにコミットします(それらを正しく書きます... :)。

13
Kristian

独立したバグを修正する場合は、個別のコミットにする必要があります。その理由は、後でバグAを修正して問題を見つけ、それを元に戻したい場合、バグBおよびCと組み合わせない方がはるかに簡単です。特に、問題。同じロジックが機能にも適用されます。基本的に、他の誰かがチェックアウトして使用できる作業コードの最小単位。その誰かが別のマシンにいるとしても。

3
KeithB

小さなコミットは、特定のものの修正について明確である場合、それほど悪くはありません。改訂履歴が込み合う可能性があることは理解できますが、プロジェクトチームの開発スタイルに関する興味深い洞察を提供することもできます。新しい開発者がプロ​​ジェクトに参加するとき、変更が十分に明確に説明されている場合、その開発者が改訂履歴リストを読むと便利です。

それでも、プロジェクトごとに異なるガイドラインがあります。コードをコミットする前に正常に実行する必要がある一連のテストがあるものもあれば、テストを自動的に実行するように構成されているものもありますコミット(パブリック継続的統合の有用な例)テストサービスはTravis CIです)。

回答は、プロジェクトで使用されているバージョン管理システムの種類によっても異なります。主にDVCSタイプのツールを使用してきたので、部分的なドキュメントとしても機能するため、小さなコミットを作成することは自分にとって重要な思い出になると思います。小さなコミットが多すぎると最初は混乱する可能性がありますが、 research によると、オープンソースプロジェクトのほとんどのコミットは小さいです。内部開発の仕組みにはばらつきがあるかもしれませんが、多くの場合、ツールで煩わしくなるのはささいなことであり、小さな変更で特定の問題を修正するのに十分なことがよくあります。

Some 小さく保つための考えられる理由:

「変更を小さな論理的なステップに分割し、それぞれをコミットする必要があります。それらは一貫性があり、その後のコミットとは独立して動作し、テストスイートに合格する必要があります。」

コンソールでgit commitのリストを表示するための便利なエイリアスを見つけました。 lgは、他のさまざまなコミットリストビューよりも迅速かつ明確に変更を確認するのに役立ちました。

# Show history in short format with colors
alias lg="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"
3
Daniel Schildt

私は常に、コミットログがプログラムの変更ログのように見えるように努めています。それは達成可能な目標ではありませんが、努力する必要があります。新機能とバグ修正ごとに個別のコミットが必要であると定義していますが、多すぎません。

さらに、チームで作業するとき、私はコミットを仲間の開発者への手紙として考え、自分が加えた変更を説明します。新しい機能を開発するときに少しでもコミットするたびに、仲間にスパムを送りたくありません。最初の試みで機能を完璧に記述したかのように、1つの大きなコミットを作成しただけの場合は、はるかに良い印象が残ります。

しかし、その一方で、私は孤独な闇に陥りたくありません... 1つの巨大な完全なコミットを1か月かけて作ります。仲間の開発者に私の進捗状況を知らせておきたいです。大きな機能は通常、意味のある部分に分割できます。したがって、経験則として、1日に1回のパブリックコミットが最小である必要があります。

1
Rene Saarsoo