2011-02-05 12 views
7

何年もの間、開発者になっていますが、これは私が知っておくべきことですが、そうではありません。緊急修正のためにSVNリポジトリを設定する方法は?

私は小さなチームでリリースされた製品を開発中です。私はコードの大部分をコミットする主な開発者ですが、時々コミットする他の開発者がいくつかあります。現在、すべてのコミット後に構築されるHudson CIを実行するステージングサーバーがあります。トランクが安定してテストされている場合は、単純なsvn upコマンドを使用してプロダクションを手動で更新します。私たちは、コードがトランクに完成されていない場合、生産への緊急/緊急の変更を必要とする状況を持っている以外

は、これは一般的にうまく働いています。

どのようにこの状況に対応するためにレポをセットアップできますか?私はthis responseが良い返答だったと思ったが、それでも私の頭の上に少しある。

生産を更新するとき、私はそのリビジョンでブランチを作成し、考えています。しかし、緊急の生産修正を行う必要がある場合は、そのブランチにどのようにアクセスすればよいのですか?また、ブランチではなくトランクでプロダクションを更新するにはどうすればいいですか?プロダクションブランチの緊急修正がトランクにコミットされていることを確認するにはどうすればよいですか?

ie。それは数回

  • 改訂1000は
  • 改訂1001年から1005年の中に含まれる新機能の要望/バグ修正されている生産に更新されて発生しているので、これは私がのためのよりよい解決策を持っているしたい状況です次のバージョン
  • 改訂1006年改訂1007年から1009年の生産
  • にプッシュする必要が緊急の修正は
  • より多くの機能更新されている改訂1010が生産
に更新次のリビジョンでなければなりません

更新:

SVNブックの分岐部を通して読んだ後、私は次のセットアップについて考えています。

  1. ときの生産に

    svn copy /trunk /branches/production_01 -m 'Production release'

  2. をprodにプッシュする準備ができて緊急の修正がある場合は、生産ブランチ

    svn switch /branches/production_01

  3. にスイッチを行う、ブランチを作成します。開発者はブランチに変更を加える必要があります。

    最新のブランチ

    svn update

から 生産で

svn checkout /branches/production_01
// make changes
svn merge /trunk # make sure changes get merged into trunk as well
svn commit -m 'Urgent fix

  • 、更新はそれのように、このプロセスの音は、私たちのセットアップのために働くだろうしていますか?

  • +1

    あなたが私たちのアップデートで説明していることは、私たちがやっていることですが、あなただけがタグ付けについて言及していません。親切にリンクしている返信があまりにも冗談だったらごめんなさい^^。結局のところ、本当に、あなたはそれをほぼ同じようにします。 –

    答えて

    3

    は、この問題に取り組むの異なる方法がありますが、私は私が行って、これを見た中で最も効率的な方法は以下のだと思います。

    • すべての開発者は、枝に入ることバグ修正や新機能をすること。これらのブランチはCIの下にあり、テストのために独自の環境に配備されています。
    • プロダクションに入るコードは、ブランチからトランクにマージされます(バグ修正ブランチまたはフィーチャーブランチのいずれか)。トランクはCIの下にもあります。一度テストされれば、それは事前プロダクトに移動し、プロードすることができます。トランクのコードだけがプロダクションにリリースされます。

    したがって、基本的にトランクに入るコードはすべて分岐からのマージです。その方法では、トランクにはリリースされるコードしか含まれておらず、厄介なコードのロールバックやリビジョンからの分岐を行う必要はありません。

    欠点は、ブランチごとに異なるアプリケーションサーバードメインとトランクとプリプロードを持つ異なるCI環境が必要なことです。

    3

    このリリースで安定化しようとしている間に将来のリリースで新しい機能をチェックしたい大規模なチームでは、毎回ブランチを作成してプロダクションにリリースする必要があります。一度に複数のプロダクションをサポートしている場合を除き、小規模チームではそれほど必要ではありません。

    あなたの状況では、私は1つの永久的なproductionブランチを維持します。通常のリリースを行うたびに、trunkで安定させ、trunkproductionにマージし、そこからテストして押します。修正プログラムについては

    、両方productiontrunkにそれをマージし、そこにあなたの変更を行い、production から新しいブランチを作成します。通常のリリースと同様に、productionからテストしてプッシュします。あなたが背面にマージする予定の最も古い枝から


    常にブランチ。これは、マージをもっときれいにします。

    +1

    @Matt、永続的な 'production'ブランチに加えて、あなたのアップデートと私の答えの違いは、一度に安定化しようとしている緊急の修正プログラムが複数ある場合は、 1つの修正プログラムだけを心配する必要がある場合は、ソリューションが簡単に実行できます。そのトレードオフを評価するのに十分なだけ自分自身の開発環境を知っています。 –

    2

    確かにこれを達成する方法はたくさんあります。修正プログラムを適用する方法は、リビジョン管理とプロジェクトリリースの全体的なプロセスによって異なります。

    1. /trunkは、広範囲の仕事は、このような新しい主要な機能として行われるときを除き、積極的な開発のために使用され、メインの開発ブランチが含まれています。そのため、私たちはすべて私たちのプロジェクトのために採用して基本的なrevision controlプロセスを記述することによって、私の答えを前に付けますよまたはリファクタリング。この場合、開発者は/branches/fooにコピーを作成し、作業が完了したら/trunkにマージします。主に/trunkで作業するかブランチを使用するかを選択することは、開発者の数、プロジェクトの複雑さ、プロジェクトの段階および開発のスピードによって異なります。いずれにせよ、/trunkはできるだけ安定してください。
    2. マイルストーンに到達し、/trunkでの作業が本番サイトへのリリースの準備ができたら、/trunkは、たとえば/tags/2.5.0(このリリースのバージョン番号)にコピーされます。 (URL内のノートキャレット(^)の表記;)
    3. は、このリリースでは、最初のsvn switch ^/tags/2.5.0を使用して(例えば、test.example.com)サンドボックスのサイトに適用され、レビューのために、クライアントやQAチームに示します。
    4. クライアントまたはQAチームが調整を要求した場合は、手順1〜3を繰り返し、マイナーバージョン番号を増やします(例:/tags/2.5.1)。
    5. サンドボックスサイトがテストされ、リリースが承認されると、サンドボックスサイトを起動するのと同じ手順が本番サイトに適用されます(つまり、svn switch ^/tags/2.5.1)。

    それでは、私たちは生産現場に緊急の修正プログラムを適用する必要がある場合には、我々はします:

    1. /tags/2.5.1のローカルの作業コピーを使用して/tags/2.5.1でリリースバージョンに直接修正を適用しますまたはサンドボックスサイトに直接アクセスすることができます。
    2. 変更がローカル作業コピーで行われた場合、変更をコミットし、サンドボックスサイトを更新します(svn up)。次に、レビュー/承認プロセスを繰り返します。
    3. 承認されたら、本番サイトを更新してください(svn up)。
    4. /tags/2.5.1でリリースされた変更は、/trunkにマージされました。
    関連する問題