2009-02-25 8 views
30

人はトランクやSubversionリポジトリのブランチで作業していたとしましょう。私はトランク上の変更を破棄し、それをブランチのコピーで置き換えたいと思います。トランクをSubversionのブランチに置き換える

another questionで提案されているように、トランクに移動したり削除したりして、ブランチをトランクにコピーすることができます。しかし、トランクの歴史は支店の歴史に置き換えられます。トランクの歴史を残したいのですが?

私が望むのは、マージのようなものだと思いますが、宛先の変更が無視され、ソースに置き換えられたものです。 Subversionでどうすればいいですか?これは良い習慣と考えられていますか?

+0

古いリビジョンをブラウズすることで、トランクの履歴にアクセスすることはできます... –

+0

しかし、ファイルの履歴を見るツール(Subclipseなど)では、ブランチのリビジョンのみが表示されます。マージ/コピー後、私は、トランク上に1つの新しいリビジョンを表示し、コピー操作からの追加/変更/削除をすべて含んでいることを望みます。 –

+0

+1:私もこれを行う必要があります。 @JWこれはうまくいくのですか? –

答えて

4

あなたがそれを行うために、マージを伝えることができ、トランクにブランチからのすべての変更をマージして、

svn resolve path --accept theirs-full 

ですべての競合を解決するか:そのようなマージ後

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full 

をブランチにあるような作業コピーがあります。そのトランクの作業コピーをコミットするだけです。

+3

は、分岐点以降トランクに加えられた変更を保存しません(少なくとも競合していないときは)?このようなマージの結果がトランクのように見えるとは限りませんが、あなたは専門家です... – rmeador

+1

ブランチを作成してから、すべての変更を元に戻すためにトランクを逆マージしてから、その逆マージをコミットします。その後、ブランチをトランクにマージすることができます。 – Stefan

+0

シンプルなsvn rm trunkとそれに続くsvn copy branch trunk(またはsvn move branch trunk)はどうですか? –

1

私はあなたが何をしようとしているのかよく分かりません。ブランチを作成した後、トランクに加えられたすべての変更に対して、何をしたいのですか?マージ後にファイルの履歴を表示するときにログに表示しないようにしますか?そうであれば、トランクを削除してブランチをその場所にコピーすると、ブランチはトランクで履歴を共有するので、ブランチの後に行われたリビジョンを除いて同じです。

トランクの履歴を保持したいが、分岐とマージの間に加えられたすべての変更を踏まえたいのであれば、ややこしい問題です。私はあなたが祖先を無視するマージ(オプション--ignore-ancestryがある)を行うと、トランクの内容をブランチに置き換えると思います。また、オプションをマージで使用することもできます(どちらも、--ignore-ancestryと併用してください)。

これが失敗した場合は、ブランチポイント以降のトランクのすべての変更をいつでもリバースマージして、ブランチでマージすることができます。これはいくつかの競合を引き起こす可能性が高いと思われます。もちろん、あなたのブランチからバージョンを使用して解決したいでしょう。これらのアイデアが最適かどうかはわかりません。

+0

私はあなたの2つのオプションのうちの2番目のものを望んでいます - トランクのすべての変更を踏んでください。 –

4

これは簡単です:作業コピーがトランクにポイントしていることを確認してから、「svn merge url-of-trunk url-of-branch」を実行してください。あなたが受け取った変更は、トランクとブランチ間のデルタです。トランクをブランチのように見せるために必要なものすべてを効果的に提供します。

1.5の新しいマージ機能がこのシナリオを変更するかどうかはわかりません。そのかなり古いスレッドものの

+1

トランクへのブランチのマージは、トランクの代わりに実際にブランチステートをコピーするのと同じ結果をもたらさないかもしれません。バージョン1.5より前のバージョンでもありません – JanM

32

が、それでも私の経験

を共有している私たちは、最近、私たちのプロジェクトの一つのためにこれをやったとしてガイドラインに従っ:これらの手順に従い

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag" 

svn delete <repos/trunk> -m "deleted trunk temporarily" 

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features" 

はそのままトランクの履歴を保持しました新しい機能ブランチをトランクとして置き換えます。

+0

現在のトランクの履歴を見ると、新しいブランチの履歴がコピーされた時点まで表示されます。古いトランクの履歴を見るには、削除する前にリビジョンを指定する必要があります。 –

+0

あなたは/ tag/old_trunkで古いトランクの履歴を見ることができます –

+0

私は亀を使用しますが、これは私の戦略になります。 –

0
trunk  remplace (trunk with your branch) 
*----x  * ----> 
\   | 
    \   | 
    *--------| 
    branch 

このブランチはとても残酷トランク(祖先の問題を)削除しないように注意してくださいのトランクから作成されました。 EclipseのSVN

  1. クリック右>チーム支店/タグを使用して

    :まず、私はこのように行う示唆...どのような場合には、あなたのトランク、バックアップと

    をタグを作ります

  2. チーム>別のブランチ/タグを切り替えます。ブランチを選択します。ブランチが正しくロードされていることを確認してください。

  3. :チーム>切断。 SVN情報を削除します。

  4. チーム>プロジェクトを共有...あなたのトランクを選択してください。

  5. チーム>あなたのトランクにコミットしてください。

  6. 右クリック... [比較]を選択します。支店/タグ - >支店を探します。すべてがOKであれば、「選択した入力に違いはありません」と表示されます。

私はそれが役に立ちそうです。

関連する問題