69

枝が幹に再統合されると、その枝は実質的に死んでいますか?

再統合後にブランチに変更を加えて、後でトランクにマージして戻すことはできますか?

4

10 に答える 10

80

技術的には可能です。ブランチは死んでも無効でもありませんが、再統合後にブランチからトランクにマージすることはお勧めしません。

その理由についての完全な議論をここで見つけることができます: Subversion merge reintegrate

基本的に、変更をトランクに再度マージすることは可能ですが、再統合により、再統合操作の前にトランクからブランチへのマージが強制されるため、Subversion 1.5 で非常に問題となるリフレクティブ/サイクリック マージに直面することになります。 .
記事によると、再統合の直後に再統合されたブランチを削除し、代わりに同じ (または異なる) 名前の新しいブランチを作成することをお勧めします。

これは Subversion の既知の動作であり、将来のバージョン (おそらく 1.6) で対処される予定です。


于 2008-09-23T07:53:28.240 に答える
19

実際には、トランクからコミット--record-onlyによって作成されたリビジョンのブランチにマージする必要があります。--reintegrate

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

そして今、あなたはそれを記録します

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

あなたは今、ブランチを維持できて幸せです

詳細はChapter 4. Branching and Merging, Advanced Merging にあります。

于 2010-05-26T11:21:48.760 に答える
8

ブランチからトランクに再統合した後、次の 2 つのいずれかを行う必要があります。

  • ブランチを削除します。これは最も簡単ですが、ブランチの履歴を確認するのが難しくなります。

  • reintegrate commit をマージしないようにブランチに指示してください。トランクに再統合し、リビジョン X としてコミットすると、ブランチで次のコマンドを実行できます: svn merge --record-only -c X url-to-trunk. ただし、マージ自体以外の変更をコミットの一部として行った場合は、これを行うべきではありません。他の変更は、ブランチに戻ることはありません。

于 2010-02-24T22:59:36.123 に答える
4

誰かがブランチに複数回変更を加えた場合 (1.5 より前) に変更を元にマージする際のアドバイス:どのリビジョンでマージを行ったかを覚えておいてくださいリビジョン番号をどこかに書き留めるか、(こちらの方が簡単です) tag を作成してください。(もちろん、後で見つけることができますが、それは PITA です。)

例:

次のようなリポジトリ レイアウトがあります。

/your_project
  /trunk
  /branches
  /tags

それが Web アプリケーションであり、リリースを計画しているとしましょう。タグを作成し、そこから (またはトランクから) バグ修正を行うブランチを作成します。

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

このようにすると、新しい機能をトランクに統合できます。すべてのバグ修正はバグ修正ブランチ内でのみ行われ、各リリースの前に現在のバージョンのタグを作成します (現在はバグ修正ブランチから)。

かなりの量のバグ修正を行い、それらを本番サーバーにリリースし、現在のトランクでそれらの機能のいずれかが必死に必要であると仮定しましょう:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

これで、1.0.0 と 1.0.2 の間の変更をトランクに統合できます (作業コピーにいると仮定します)。

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

これは覚えておくべきことです。トランクで 1.0.0 と 1.0.2 の間の変更を既にマージしています。現在の製品リリースにさらに変更があると仮定しましょう:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

トランクから新しいバージョンをリリースする準備ができましたが、バグ修正の最後の変更がまだ不足しています:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

これですべての変更がトランクにマージされ、リリースを行うことができます (最初にテストすることを忘れないでください)。

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0
于 2008-09-22T09:08:47.583 に答える
2

誰もがここですでに言っているように、ブランチは死んでおらず、ブランチへのコミットは問題なく続行できます。

ただし、マージ後にブランチを強制終了したい場合があります。唯一の確実な解決策は、ブランチを削除することです。欠点は、たとえば歴史的な理由から、ブランチを確認したい場合に、ブランチを再度見つけるのが難しいことです。そのため、多くの人は「重要な」ブランチを放置しておき、変更しないという合意を得ています。ブランチをデッド/読み取り専用としてマークし、追って通知があるまで誰もコミットできないようにする方法があればいいのにと思います。

于 2008-09-19T20:22:41.997 に答える
2

いいえ、枝はまだ生きていますが、その時点では幹とまったく同じです。ブランチで開発を続ける場合は、後でトランクと自由に再マージできます。

于 2008-09-19T14:53:40.167 に答える
1

ブランチからトランクへ、またはトランクからブランチへ、何度でもマージできます。

于 2008-09-19T14:53:43.007 に答える
-1

マージを行うときは、ターゲットを指定します。必要に応じて、TreeA と TreeB の違いを TreeC にマージできます。クリスが暗示しているように、あなたの質問はあまり意味がありません。ブランチをトランクにマージすると、ブランチはそのまま残ります。後でブランチが必要ない場合は、削除できます。

于 2008-09-19T14:56:20.330 に答える
-1

ブランチで開発を続けることができます。必要な機能は、Subversion 1.5 にあるマージ追跡です。これは、ブランチからの追加のマージには新しい変更のみが含まれることを意味します。

于 2008-09-19T14:57:08.987 に答える