2010-12-31 18 views
5

解決策が正常にコンパイルされ、正常に構築された場合にのみコミットする必要がありますか?コードが非常に大きな変更で受け入れられる「途中」コミットは、コードが数時間では機能しないままになりますか?SVNコミットの規則

答えて

10

はい、問題ありません。

バージョン管理はバージョン管理用です。バックアップではありません。コンパイル可能なコードのバックアップを処理するためには、別の場所に別のものを用意しておく必要があります。これは実際にバージョン管理システムに回り込むことがあります。 に現像剤を強制的に

いずれかの方法コードをチェックインするを待つかの時点で失われたコードの差し迫った災害です。

+2

+1です。同意する。できるだけ頻繁にコミットしてください。それ以上考えないでください。できるだけ多くのことをコミットしてください。私は、利点があり、頻繁にコミットするのに欠点がないことがわかります。 – Upgradingdave

+1

+1。私も同意する。開発者が洞窟で開発を進めて、「楽しいよ!」と言っている間に、ビットとバイトの山を他のプログラマーに投げ捨てることは望ましくありません。状況やその他の要因によっては、ウイルスやハードドライブが壊れたり、ノートパソコンが盗まれたりするなど、1日以上の価値が失われたり、仕事を失った場合は、ポリシーを適用した会社で働いていました。 – jgifford25

+0

@ jgifford25 Eee-yikes !!あなたはストレスをよく補ってくれることを願っています...私はナッツに心配していると思います... –

5

コードが長時間にわたって壊れないようにするには、バージョン管理ではなくcontinuous integrationのジョブを使用します。

+0

あなたの会社がCIを信じていなくても、それをあなたのマシンの1台に置くことができます(JEEのただ1つの戦争で、あなたを遅らせることはありません)。 – IAdapter

+0

あなたの会社がトランクを常にコンパイルするように制御することができれば、CIは彼らの夢のような夢でなければなりません...それはトランクがコンパイルできるようにして数分以内に犯人を指摘します... –

+0

私は質問がポリシーあなたはその政策の技術的強化についてではなく) –

5

BrianとAaronのコメントに加えて、私はブランチや、もっと極端な解決策としてGitのような分散システムを使って、安定性と最新のコードとの間のこのトレードオフを緩和することもできると付け加えます。 「頻繁にコミットしてビルドボックスにエラーを発見させる」というのが私の大好きなポリシーですが、コードをチェックアウトするための安定した場所が必要な場合は、ブランチが必要です(もちろん誰かがそれを維持しなければなりません)。私の意見で

+0

私はチームメンバーにこの方法をお勧めします。ビルドを壊す恐れがなくなります(フィーチャーブランチは通常は自動的にビルドされないため)。また、リポジトリに変更を加えるセキュリティも提供します。また、私のチームは自分たちの機能ブランチを再統合することを奨励するので、自分のコードをより良くマージする方法を学ぶのに役立ちます。 – arcain

+0

@arcain SVNに組み込まれているマージ管理を使用していますか?それはどれくらいうまくいくのですか?私は数ヶ月後に面倒な機能のマージによって燃えてしまったので頼みます。私たちは古いSVNバージョンを実行していたので手で並べていました。 –

+1

私たちはTortoiseSVNを使用していますが、エラーでマージフラットアウトが失敗することはありませんでしたが、偶発的にブランチにコミットした場合に、わずかな数のリビジョンのロールバックが必要なコミッタによるオペレータエラーのケースがありました。完全なリビジョン範囲を親にマージすることができなかったので、ブランチを自動的に再統合することは選択肢ではなかったので、リビジョン範囲をチェリーピックする必要がありました。これらのケースの中には、ブランチから作業コピーにマージされたrevを無視し、解決されたものとしてマークし、変更を手動でマージするほうが簡単でした。 – arcain

3

、それが使用されているVCSの種類によって異なります。

  • あなたはSVNのようなの集中 1を使用している場合、私ははい、それは許容可能である言う傾向があると思いますに続いてAarons引数。あなたはGitのようDVCSを実行している場合、すべての開発者が、自分のローカルコミットを行う実装をテストしてから(裸)公衆レポに押し戻すことができるので
  • 、私はそれが受け入れられない、ノーを言うだろうかつて彼の仕事は終わった。

あなたがするSubversionあなたの質問をタグ付けするので、Aaronに従ってください。

1

私の経験では、少なくともは、変更の急変をコミットしないようにしてください。チームがより大きい場合、または開発のペースがより速い場合、より多くのことができます。アイデアは、チームのすべてのメンバーが最新の変更で最新の状態に保たれるということです。 チームメンバーによって各コミット後にsvn updateを実行することを恐れてはなりません。

最新のバージョンに定期的にコンパイルエラーがある場合、これは不可能です。コミットされていない変更や、今すぐ受け取った問題がsvn updateによって導入されたかどうかを確認することは必ずしも容易ではないので、失敗したテストでさえ迷惑になる可能性があります。突然事態がもはや働いていない理由を誰もが解明しようとしているので、仕事は止まってしまいます。

また、変更を中断すると、bisect the source code historyの機能が妨げられます。だから、あなたが単独でやフィーチャーブランチで仕事をしても、それらを避けることは依然として貴重です。

変更を破棄しないようにするポリシーは、通常の小さなコミットと矛盾する必要はありません。大規模な変更は、ほとんどの場合、小さなタスクのリストに分割することができます。それぞれのタスクは、ビルドを壊さない程度の小さなサイズのコミットで完了できます。これには、競合が軽減されるという利点があります。

  • XYZを固定に向けて:私は、このような小さなタスクのための私のコミットメッセージにこのようなものを置く傾向があるXYZを固定に向けてアスペクトfooの
  • のpreperationにファズをリファクタリング: アスペクトfooは現在動作します
  • 固定xyzaspect ba rは現在動作します