本当に大きなソースコードコミットの用語は何ですか?[閉まっている]


37

時々、ソフトウェアのコミット履歴を確認すると、実際には大きなコミットがいくつかあることがわかります。数百のソースコード行(デルタ)が変更された10または20のファイルが変更される場合があります。このようなBIGコミットには一般的に使用される用語がありますが、その用語が何であるかを正確に思い出すことはできません。誰も私を助けることができますか?プログラマーがこのようなBIGと巨大なコミットを指すために通常使用する用語は何ですか?

ところで、たくさんの変更をまとめてコミットするのは良い習慣ですか?

更新:感動的な議論をありがとう!しかし、「コードボム」は私が探している用語だと思います。


15
「コミットの破壊」。:-)
ピーターK.

3
個人的には、そのサイズのコミットを呼び出しますcluster f...
ラムハウンド

1
私の上司はいつもこれをしています。チェックインコメント:「すべて; o)」
MetalMikester

質問の1、私がこれまでにすべての答えを愛し、そして少なくとも私のキャリアの中で一度罪の少なくとも一つを犯したて苦戦しているとそれをしないために他人をしたいので、=)
パトリック・ヒューズ

私はコード雪崩と言うかもしれません!
ブライアン14年

回答:


50

(1)Ben Collins-Sussman: "..." code bombs "。つまり、誰かが書くのに数か月かかった巨大な新機能を備えたオープンソースプロジェクトに現れたら、あなたはどうしますか?数千行のコード?...」

(2)Dan Fabulich:「コード爆弾、または:ビッグアイデアを持つ初心者... コード爆弾は、誰もレビューできないほど大きいパッチです。」

(3)Google Summer of Code:ガイドライン:「早期にコミットし、頻繁にコミットする...終日作業せずに、すべてを1つのコード爆弾で押し出してください。代わりに、すべてのコミットは1つのタスクのみに含まれますログメッセージに要約する必要があります。」

(4)ジェフ・アトウッド:「コード爆弾...ルール#30:暗くなるな ...」


リンク2と4は直接リンクし、リンク1を引用します。コンセプトの広がりには何も問題はありませんが、関連性は少し低くなります。私はこの用語が好きですが、それがそれほど追いついていないようです。
ヘイレム

1
コミットされたコードが、プロジェクトの他の部分から完全に分離された新しいコードである場合はどうなりますか?この場合、(ほぼ)終了してクリーンアップされたコードの1つの大きなコミットは、(1)中間バグの修正、(2)クラスの名前変更などのリファクタリングを人々に強制する多くの小さなコミットよりも優れていると思います( 3)最終的に削除される予定の予備コード。ちょうど2セントです。
ジョルジオ

これが、私が歴史の書き換え/
リベースに

@Giorgio-それがブランチの目的です。
ブライアン14年

@ブライアン:はい、それは可能性です。この場合、ブランチで開発した機能をマージすると、メインブランチで大きなコミットが行われます。
ジョルジオ14年

38

おそらくそれを悪いコミットと呼ぶでしょう。:)

悪い練習

そして、はい、それは一般的に悪い習慣とみなされます:

  • 確認するのが難しくなる
  • コミットの元の意図を簡単かつ迅速に把握することを困難にします
  • それは作りにくいそれが明示的に問題を修正または対処するためのコードに影響を与えたかを確認するために
  • コミットのサイズが、おそらく関係のない他の変更のノイズによるものかどうか(たとえば、小さなクリーンアップや他のタスク)によるものかどうかを知ることを困難にします。

許容されるケース

ただし、大規模なコミットが完全に受け入れられる場合があります。例えば:

  • ブランチ間マージする場合、
  • バージョン管理されていない別のコードベースから新しいソース追加する場合、
  • 大きな機能をインプレースで置き換える場合(ただし、ブランチでそれを行い、変更のさまざまな部分に対応する小さなコミットを行い、全体をマージして戻すことにより、機能と途中で発生した可能性のある問題)、
  • 多くの子孫およびコンシューマクラスに影響するAPIリファクタリングするとき。

そのため、可能な限り、「外科的ストライク」タイプのコミットを優先します(そして、それらを課題追跡のタスクIDにリンクします!)。正当な理由がある場合は、先に進んでください。


それとは別に、私は実際には知らないし、大規模なコミットの特別な名前を聞いたこともないと思います。モンスターコミット?ファットコミット?

更新: David Caryの回答は、「コード爆弾」という用語を使用して有名なIT関係者にリンクしています(最も重要なのは、Subversionの元の作成者であるCollins-Sussman )。そのように(これまでのところ、頻繁に聞いたとは言えませんが)。


11
ゴジラのコミット!Eeeeeeeek !!!
ペテルトレック

@PéterTörök:気に入っています。それをトレンドにしましょう。その他のオプション:クジラコミット、ガルガンチュアンコミット、または非常に単純なBigFatCommit。
ヘイレム

1
ええ、「悪い」または「遅い」。会社に名前がない場合は、問題の開発者にちなんで名前を付けます。「ちょっと新しい男、ジェリーをやらないで!早くコミットし、頻繁にコミットする。」
-chooban

ジェリーをしないでください、それは便利なアプローチです!また、大規模なコミットは、バージョン管理の使用を理解していない、またはバージョン管理の使用を理解していないストレスのある開発者から調達することができます。知識を確認してください!
独立

誰かの名前がジェリーだったら?
ロイックフォール-ラクロア

12

ところで、たくさんの変更をまとめてコミットするのは良い習慣ですか?

まあ、長い間変更を保持し、さまざまな機能とバグ修正を実装してからコミットするのは良い習慣ではありません。これは大きなコミットが起こる可能性のある方法の1つです。

これが発生する可能性のある別の方法は、リファクタリングが広く使用されている関数のシグネチャを変更し、それらすべてを変更する必要がある場合です。これは必ずしも悪いことではなく、開発者が何らかのしきい値を超えることを恐れてコードをクリーンアップすることを控えたくありません。

そのため、コミットで触れられたファイルの数を見るだけではありません。


5
この。実際に重要なのは、変更されたファイルの数や変更された行の数ではなく、変更の範囲です。何も残さない短いコミットメッセージで一連の変更を簡潔かつ正確に説明できる場合、物理的な変更カウントは比較的重要ではありません。それほど重要ではありませんが、私自身は、一部のコミットのみがビルドするソースコードツリーを生成する一連のコミットよりも、ビルド可能なコードを保持する1つの大きなコミットが必要です(メソッドシグネチャの変更を参照)。
CVn

8

私が聞いた用語は「分厚いチェックイン」です。そして、私は彼らのファンではありません。私は、プロジェクトの合理的なステップで他に何も壊れないようにする小さなコミットが好きです。通常、大きなコミットには、それが発生したときからしばらくの間反響する問題がたくさんあります。


+1は当時覚えていなかったので(これは一般的な用語だとは思いませんが、知らないのですが)、と関連して水銀によって具体的に使用される「チャンク」という言葉を聞きました。さまざまなデータのチャンクを含む大規模なコミットを送信できる拡張機能ですが、それを除けば、一般にコミットという用語を聞いたことはないと思います。
ヘイレム

開発者がその用語を使用したときに私がいた会社はSourceGear Vaultを使用していました。
ジェシーC.スライサー

3

「典型的なSVNコミット」または「明日はリリース日コミット」と呼びます

SVNが大好きなのと同じように、ローカルコミットを実行できないという事実によって、私はオフになっています。

編集:通常、コミットメッセージに「スタッフ」と「ビール」という言葉があります。

もう一度編集:多くの変更をコミットすることは、必ずしも悪い習慣ではありませんが、可能な限り避けるべきです。短く簡潔なリビジョン/コミットを確認する方が簡単だと思います。(よく書かれたコミットメッセージとペアになっています。悪い例については以前の編集を参照してください)



2
  • 初期コミット -SVNにスローされたリビジョン管理下になかったプロジェクト
  • リファクタリング -アーキテクトは、クラス名をSmurf Naming Conventionとの間で変更したり、パッケージ階層のルートを変更したりするという素晴らしいアイデアを持っています。
  • コード形式 -アーキテクトは、コードのインデントを4スペースから3スペースに変更するか、行末をUnixからWindowsに変更する(または元に戻す)ことを決定しました
  • 金曜日のコミット -ジョーは常に金曜日の16:30に1週間の仕事をコミットしています
  • uuups commit -Tedは誤ってルートディレクトリを削除し、それをコミットしました。そして今、彼は再びファイル階層全体をSVNに送り込みます。

0

通常、多くの人々は集中型VCSを使用して大きなコミットを行う傾向があり、特にサーバーは適切なコミットポリシーを実施します。つまり、コミットはすべてのテストに合格する必要があり、テストには時間がかかります(数秒より長くなります)。したがって、開発者は、何度もコミットして変更を複数の小さなコミットに分解するのにそれほど長く待つことを望みません。

また、VCSに環境に優しい開発者は、変更を複数の小さなコミットに分解するのを忘れることがあります。彼らはプログラムをQAチームにリリースするときにのみコミットすることを覚えています。さらに悪いことに、他の人がバグのあるコードを見るのを避けるために、QAテストに合格するまでコミットしません。最後に、彼らは実際に「大きな」コミットを生成する出力バイナリ、一時ファイル、およびリンカー出力をコミットしたことを認識していませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.