2009-06-03 13 views
4

私たちは、ERPシステム上で働く地理的に多様なソフトウェア開発者のチームです。 バージョン管理システムとしてSVNを使用しています。 コードが運用システムに移行する前に、4つの環境があります。ソースコード管理に関するベストプラクティスは何ですか?

このような状況でSVNを使用する場合、ブランディングとマージングに関するベストプラクティスを知りたいと思います。

現在、1つのファイルに4つの変更があります。顧客は、X(毎年4回のメインリリースと4回のマイナーリリース)のリリースに2回の変更しか望みません。

私たちが直面する問題は次のとおりです。 ブランチが多すぎます。 複雑な手動マージ。 トラックまたは変更を失う 他の人のコードを上書きしています。

SVNをより良いツールとして使用すれば、どのようにしてこの問題を解決できるのですか。

ありがとうございました。

答えて

5

多分、メインブランチにコードを取得する方法は、(diff/mergeが良いソース管理システム以外の)異なるツールに役立つかもしれません。

それは一般的に、あなたのプロセスに依存するが、:大きなチームにとって

  • 良い練習新 機能ごとに別々の分岐を有していて にある/ メインラインにコードをリリースする前
  • 開発者が修正引き上げます最新の をブランチにメインで実行し、すべてを実行してください テストがすべて動作することを確認する
  • チームが大きい場合は、 をリリースマネージャ にリリースブランチ とそれに 新機能をマージする許可されている者、開発者 を持ち、リリース、単に メインブランチを凍結し、 機能がさらに良く
  • に行く順序を管理を管理します新機能は準備ができて と一人が、リリース前に変更
  • メインブランチにフリーズ解除ブランチをマージし、鉄のバグに テストを実行することをノートを提出し、あなた が近い場合にのみ、バグ修正の新 機能を許可していません。リリース日
  • はコミットの数に依存しています は小さい より最終的には各ポイントリリース

で を動作するように知っていることをマイルストーン と機能性を確立するためにテストされているリリースに関係なく、どのような正確を作成することができますプロセスは主なポイントは、開発者が手順を理解し、誰かがそれを実施することです。

1

を、できるだけ早くあなたが多くを分岐始めると、SVNと同じ問題を抱えていた(そして、あなたはすべての異なるケースに対応するために持っていますプロジェクトの生活の中で)、マージを開始すると大きな苦痛があります。ブランチの長さが長く続くと、マージはそれ自体で全体の "プロジェクト"になります。

もっと良い方法は便利ですが、ツールが簡単にそれらのいくつかを強制することができればいいだろう。

私はMercurialが推奨されていますが、現在はSVNを置き換えることを検討しています。これは設計によって配布されていますが、より良いマージツールとより良い/簡単なブランチ/リポジトリ管理がありますそれを調べることもできます。

+0

SVNを使用している場合、SVKはSubversionのマージの複雑さを管理するための素晴らしい付属ツールです。ツールとして、Subversionは、ClearCaseのようなものがリリース管理のセキュリティ/柔軟性の多くを提供するわけではありません。私は彼らがそのギャップを修正しようとするかどうかは確信していません - 彼らの述べられた目標はCVSより優れたCVSであり、彼らは驚くほどうまく管理しました。 –

+0

ソースコントロールを変更するのは面倒です。 darthcoderの示唆しているように、より良いdiffツールを見てみたことがありますか?私はサードパーティのSVNクライアントを持っていますが、私は私のオペレーティングシステム(Apple FileMerge)に含まれているツールを使用するよりも、私が使っているサードパーティのdiffツールが好きです。 Araxis FileMergeはすばらしいツールです。私はChanges(OS Xのみ、残念なことに)がベストです。 –

+0

@darthcoder&Andrew:明らかにMercurialはSVNリポジトリを簡単にインポートしてコミット履歴を取得することができますので、非常に複雑ではないかもしれませんが、あなたが提案しているツールを調べます。 – Billy

1

あなたが求めているのは、Unified Change Managementです。これは、Subversionが本当にうまく設計されていないものです(IMO)。変更を管理するには、手作業である程度の労力を要します。しかし、ここで私が働いてきた多くの場所がやっていることだあなたが場所でまともな問題追跡システムを持っていると仮定すると:バグが修正パッチのリリースに取り組んで

main branch (trunk) - new feature development here 
    |- release-1.0 - locked release branch 
    |--- release-sp1 
    |--- release-patches - patch release fix stream (new fixes merged here) 
    |------ release-sp1-issue# - this is where you make your bug fixes 
           before merging them. 
           This issue# is the bug-id in your tracking system. 

たら、古い-issue#ブランチを削除します。これにより、支店は支配しなくなりますが、チェンジセットを小さく保つことができます。

メンテナは、リリーストランクをインテグレータのみに書き込み可能にすることで強制できます。 apacheの経由でSubversionを使用:各続い

project 
    |- branches (everyone: rw) 
     |- individual-fixes 
    |- release-branches: (integrator: rw, everyone: ro) 
     |- release-1.0-fixes 
     |- release-2.0-fixes 
    |- trunk  (integrator: rw, everyone: ro) <- new dev goes here!!!! 
    |- tags  (integrator: rw, everyone: ro) 
     |- release-1.0 
     |- release-1.0-sp1 
     |- release-2.0 

をマージSubversion/Apache Permissions、あなたがグループを作成することができ、インテグレータ、

プロジェクトに、次の権限を設定することは、十分に追跡され、小さい、人々の唯一の小さなグループがマージを行うことができます。ただし、これにより、マージチームにボトルネックが発生します。私は大規模なgit/mercurialチームと協力して、これがどのように機能するかを見てきたことはありません。

フィーチャ修正にも同様の方法を実装しますが、代わりにトランクをオフにします。

+0

リリースブランチを開発用トランクに保管していますか?私はこれを理解するのが難しいです。私は標準のSubversion構造体を使用しているので、タグフォルダにリリースを保持します。このような音はすばやく乱雑になります。 –

+0

タグは読み取り専用です。あなたはこれらに統合/マージすることはありません。しかし、独立したリリースブランチツリーを持つことで、インテグレータへのアクセスを制御できます。理想的には、何かがタグ付けされると、リリースブランチが削除されます。 SP1が出荷されると、これ以上の変更はありません。この例では、1つのリリースを前提としていますが、トランク(新規開発)とリリースフィックスストリームの2つのブランチがあり、最終的に新しいサービスパックになります。 –

関連する問題