私の質問は、以下の手順に従ってマージする場合、「ブランチをトランクに戻す」手順の最後のステップは、ベストプラクティスのシナリオでこれを行う適切な方法ですか?
私は何年もの間svnを使用してきました。私の個人的なプロジェクトでは、私は常にトランクを再考することなく楽しくハックしており、長い間、1 行の直線的な方法でバージョン管理を行うことは完璧に近いものでした。シンプルで効率的。サードパーティのライブラリをもっと制御したい日まで、すべてが至福でした。
今日、私はトランクから直接ハックするアプローチを超えたと感じるプロジェクトに取り組んでいます。私は複数のサードパーティ ライブラリを持っており、その一部は毎週変更されており、何が入るかをより詳細に制御する必要があります。サードパーティのライブラリ バージョン間で特定の変更セットを表示し、特定のライブラリに加えた変更を追跡する機能が必要です。コードベースが非常に混乱し、経験の浅いビルドマスターで実行可能な状態に戻すのが困難になるのを何度か見てきましたが、ここで失敗する余裕はありません。
そこで、ベンダーの分岐について調べ、あちこちでいくつかの記事を読みました。私は「Subversion によるバージョン管理」という優れた本を持っていますが、私が目にする例は、そのアプローチが矛盾している場合があり、「分岐」の意味を理解したいと考えています。私はEvan Weaver によるこの投稿で与えられたアプローチに従おうとしていました。
以下に手順を示しました。私の懸念は、最後のセクション「ブランチをトランクに折りたたむ」にあります。私が過去に一緒に働いたビルドマスターは通常、ブランチチェンジセットをトランクに「マージ」したようで、ブランチが削除されたとは思いません。これは適切なアプローチですか?
ブランチの作成
1 - 現在のヘッド リビジョンに注意してください。
svn info svn://server.com/svn/repository/trunk | grep Revision
2 - トランクのクリーンなリモート コピーをブランチ フォルダーに作成します。何か名前を付けてください。これを your_branch と呼び、HEAD_REVISION をステップ 1 でメモしたリビジョン番号に置き換えます。
svn cp svn://server.com/svn/repository/trunk \
svn://server.com/svn/repository/branches/your_branch \
-m "Branching from trunk to your_branch at HEAD_REVISION"
3 - 新しいブランチを指すようにローカル チェックアウトを切り替えます (変更は上書きされません)。
svn switch --relocate \
svn://server.com/svn/repository/trunk \
svn://server.com/svn/repository/branches/your_branch
4 - ローカル チェックアウトが確実に your_branch になり、問題なく更新できることを確認します。
svn info | grep URL
svn up
5 - 必要に応じて新しい変更をコミットします。
ブランチの更新
あなたは your_branch でしばらくの間開発を行ってきました。トランクの他の人も同様です。今度は、your_branch に彼らの変更を追加する必要があります。
1 - まず、ブランチ チェックアウトを更新し、未解決の変更をコミットします。
2 - Subversion ログを検索して、変更を最後にマージしたリビジョン番号を確認します (マージしたことがない場合は、元のブランチがいつ作成されたか)。これは、マージを成功させるために重要です。
svn log --limit 500 | grep -B 3 your_branch
3 - 現在のヘッド リビジョンにも注意してください。
svn info svn://server.com/svn/repository/trunk | grep Revision
4 - トランクの最後にマージされたリビジョンとトランクのヘッド リビジョンの違いを your_branch 作業コピーにマージし、LAST_MERGED_REVISION をステップ 2 で書き留めたリビジョン番号に、HEAD_REVISION をステップ 3 で書き留めたリビジョン番号に置き換えます。
svn merge -r LAST_MERGED_REVISION:HEAD_REVISION \
svn://server.com/svn/repository/trunk .
5.a - 出力でエラーを探します。すべてのファイルが見つかりましたか? 削除されるべきではないものが削除されましたか? 多分あなたはそれを間違った。元に戻す必要がある場合は、svn を実行しますrevert -R
5.b - 5.a で問題がないように思われる場合は、競合を確認し、見つかった競合を解決します。
svn status | egrep '^C|^.C'
6 - マージをコミットし、COMMAND を手順 4 の正確なコマンド コンテンツに置き換えます。
svn ci -m "Merged changes from trunk to your_branch: COMMAND"
枝を幹に折り返す
ねえ、your_branch は完了です。今度はトランクにならなければなりません。
1 - まず、前のセクション (「ブランチの更新」) のすべての手順に従って、your_branch がトランクの最近の変更と同期されるようにします。
2 - トランクを完全に削除します。
svn del svn://server.com/svn/repository/trunk
3 - your_branch を古いトランクの場所に移動します。
svn mv svn://server.com/svn/repository/branches/your_branch \
svn://server.com/svn/repository/trunk
4 - 作業コピーをトランクに再配置します。
svn switch --relocate \
svn://server.com/svn/repository/branches/your_branch \
svn://server.com/svn/repository/trunk
終わり!
この手順に関するアドバイス、コメント、またはフィードバックをお待ちしております。