ソース管理の変更を複数のブランチにコミットする実用的な方法
-
03-07-2019 - |
質問
ソース管理を使用する場合の一般的なシナリオは、バージョン管理されたリリースブランチとともに開発ブランチを作成することです。開発ブランチとしてHEADを使用したCVSと、たとえば製品の現在のリリースの場合はrelease-6-2。
新機能の開発は開発ブランチのみになりますが、バグ修正は開発ブランチと現在のリリースブランチの両方にチェックインする必要がある場合があります。これは時には非常に退屈になることがあるので、これを実現する実用的な方法を探しています。
コミットするファイルが2つのブランチで同期している場合、特に、「これらのブランチにコミット」をすばやく探しています。ソリューション。
(ソース管理システムとしてCVSを使用しているため、CVS固有の回答はどれも素晴らしいものですが、他のソース管理システムがより良い方法を提供できるかどうかを確認することも興味深いです。 クライアント側ではEclipseを使用しているため、Eclipseソリューションは優れています。ただし、Eclipse以外のソリューションを使用している場合は、それでも問題ありません。)
解決
必要な最も古いリリースブランチに修正を適用します。次に、最後のリリースブランチからHEADにマージするまで、変更を次のリリースブランチにマージします。
製品の最も古いバージョンが1.0であり、1.1および1.5のリリースもあるとします。次のリリースの新機能がHEADに追加されています。 1.0でバグが見つかった場合は、1.0ブランチに修正を適用します。 1.0から1.1ブランチにマージします。 1.1から1.5ブランチにマージし、最後に1.5ブランチからHEADにマージします。
ブランチからブランチへのマージは、各ブランチに修正を手動で適用するよりも優れています。
CVSでは、マージされるバージョンを手動で追跡する必要があるため、次回のマージを行うときに同じリビジョンを含めないでください。
Subversionを使用するように変更すると、ブランチからブランチへのマージが簡単になります。 EclipseのSubversionツールは、以前にマージしたリビジョンを追跡し、2つのブランチ間で繰り返しマージを実行するタスクを大幅に簡素化します。
CVSからSubversionへの変更は簡単です(ish)。あなたはそのような動きをした最初の人ではありません。
他のヒント
awalsheが言ったように、ブランチ間でマージする方が良いでしょう。マージをチェリーピックするには、 Pragmatic Version Controlで説明されている方法CVSの使用は非常に優れています。
ブランチで-変更前のタグ( PRE_FOO
)、変更を加えてコミット、変更後のタグ( POST_FOO
)。次に、トランクで、タグを使用してマージします。
cvs up -j PRE_FOO -j POST_FOO
SVNではブランチ間のマージがはるかに簡単で安全です。CVS履歴全体をSVNに変換するのは簡単です-を参照してくださいcvs2svn 。 SVN 1.5を使用するか、以前のSVNバージョンでは svnmerge を使用する必要があります。