1

Subversion のトランクにいくつかのブランチをマージするように割り当てられました。現在、プロジェクトのセットアップは次のようなものです。

trunk
branches
    BranchA
    BranchB
    BranchC
tags
    // A bunch of tags (1 per release)

目標は、統合BranchABranchBてトランクに戻し、何らかの形で「隠す」ことです。

私は実際のマージを行う方法を知っていると思います。Windows エクスプローラーでトランクを右クリックしTortoiseSVN > Merge...Reintegrate a branchブランチを選択してマージします。

質問 1 - これは正しい使用方法ですか?

また、これを行った後、リポジトリがどのようになるかもわかりません。将来の開発者が古いブランチで誤って作業しないようにしたいと考えています。

質問 2 - ブランチはマージ後に機能しなくなりますか、それとも何か他のことをする必要がありますか? ブランチを「削除」できますか? その場合、ブランチ履歴はどうなりますか? それとも、ブランチにロックを適用するなどのハッキーなことをする必要がありますか?

助けてくれてありがとう。

4

2 に答える 2

2

質問 1 - これは正しい使用方法ですか?

はい、これでブランチの内容が作業ディレクトリにマージされます。(新しくマージされた) トランクをコミットするまで、リポジトリには何も起こりません。コミットすると、トランクの変更がリポジトリにあるだけでなく、ブランチからマージされたものも記憶されます。

質問 2 - ブランチはマージ後に機能しなくなりますか、それとも何か他のことをする必要がありますか?

この時点で、ブランチを削除するか、ブランチに変更を加え続けることができます。ブランチに変更を加え続け、後で別のマージを行うと、(以前にマージされたものではなく) 新しいものだけがトランクにマージされます。

ブランチを削除したい場合、私が見つけた最も簡単な方法は、リポジトリ ブラウザーを開き、ブランチを右クリックして [削除] を選択することです。ブランチは最新バージョンから消えます。それはまだレポ履歴に残り、必要に応じて元に戻すことができますが、新たにチェックアウトを行っている人には表示されません。

于 2013-02-07T19:38:07.203 に答える
1

コマンドラインから (質問 1 への回答):

$ cd $DEVROOT/トランク

$ svn マージ http://company.org/svn/proj/branches/BranchA
....
$ svn ci -m 'マージされたBranchA'
$ cd rm -m 'BranchB は既にマージされています' http://company.org/svn/proj/branches/BranchA

$ svn マージ http://company.org/svn/proj/branches/BranchB
....
$ svn ci -m 'マージされたBranchB'
$ cd rm -m 'BranchB は既にマージされています' http://company.org/svn/proj/branches/BranchB

トランクをブランチにマージし、マージをトランクに戻すことは、SVN の有効な使用方法ではありません。なぜ - 読む:

あなたの実際の要件がわからないため、質問2には答えられません...公式ガイドを読むことをお勧めします:

また、機能開発には機能リーフを使用し、長期バージョン サポートにはブランチリーフを使用し、リリースにはタグを使用することを提案します。

また、ブランチを削除することはお勧めしません。なんで?SVNで削除してもリポジトリは小さくならないため... svn lsの出力を短くするだけです...

私のガイドを見てください:


  • 各メジャー リリースには独自のブランチがあります。
  • 開発用に予約された別の単一のブランチ。
  • 最新のメジャー リリース ブランチがアクティブです。古い主要なブランチはすべてパッシブです。
  • パッシブ メジャー ブランチは、このメジャー バージョン シリーズの最新コードのマイナーなバグ修正のためにのみ使用されました (新機能はありません)。
  • 開発ブランチで開発された機能。リリース前に、アクティブなメジャー リリース ブランチにマージされます。
  • バグは最も古いメジャー バージョン ブランチで修正されました。バグは提供され、次のすべてのメジャー バージョン ブランチおよび開発ブランチにマージされる必要があります。
  • リリースとは、ブランチで一連の機能とバグ修正の開発を完了し、製品ビルドをリリース サーバーに移動することを意味します。
  • テストと安定化の後、リリースが行われました。これの意味は:

    • VERSIONファイルを更新しました。
    • CHANGE ファイルには、機能セット、バージョン、データ、および VCS リビジョン番号が含まれています。
    • VCS でタグによってリリースをマークします。
    • タグでマークされたソースのビルドを呼び出します。結果をリリースサーバーにコピーします。
  • あるバージョンでバグが発見された場合、開発ブランチで修正され、新しいマイナー/修正製品バージョンでリリースされます。

  • 以前のメジャー/マイナー リリースはサポートされていません (最新のリリースを使用してください)。ユーザーは常に最新リリースへの更新を余儀なくされます。

ここでt - タグ、b - ブランチ:

  +--+-----+----------------------+-----+----+------ +--------+----->
  開発| | | ^ ^ | | | | | | | | |
     | | | | | | | | | | | | vvv
     | | | | | | | | | | | | +--+------+------+-->
     | | | | | | | | | | | | b2 | | | | |
     | | | | | | | | | | | | vvv
     | | | | | | | | | | | | t2.0.0 t2.0.1 t2.1.0
     vv | | | vv
    t0.1.0 +---+------+-+---+-+-----+------+------+------+ ------+----->
           b1 | | | | | | | | | | | | | | |
               vvvvvvvv
              t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3

この例では、開発ブランチは本番用の準備ができていなかったため、タグ1.0.11.0.2をリリースし、ブランチ1でバグ修正を行い ます。

于 2013-02-07T19:22:23.600 に答える