2012-01-24 3 views
2

開発チームが私たちのリポジトリのファイル構造を再構成したいという状況に直面しています。このプロセスには約2〜3ヶ月かかります。ファイルの再構造化の間、我々はまだソフトウェアのリリースを行う必要があります。したがって、再構造化プロセスの後、私たちは、ブランチから組織化されたファイルをトランクにマージする必要があります。ファイルの履歴を保存することが重要です。また、最初にブランチを作成してからトランク内のコード変更をマージできる必要があります。ブランチのファイル構造が変更されたトランクをブランチにマージするサブバージョンのベストプラクティス

私の最初の試みはブランチを作成し、それを単純にマージすることでした。残念ながら、それは私が思ったほど単純ではありません。私のテストシナリオの一つは、以下の通りであった:

  1. は支店に支店
  2. 内のファイルがやっ
  3. 更新をファイルを移動トランク
  4. 更新トランク
  5. 内のファイルからの分岐を作成しましたブランチからトランクへのマージ

手順5で、「ツリーの競合」というエラーが表示されます。私がトランクで更新するファイル。 TortoiseSVNは、衝突したファイルが関連しているブランチのどのファイルに関する情報を提供しません。私のシナリオでは、問題のあるファイルを把握することはそれほど難しいことではありません。しかし、実際のリポジトリでは、何千ものファイルがあり、それらのファイルの多くが(別のフォルダにある)同じファイル名を持つため、非常に難しいでしょう。

誰も私と同じ状況で経験していますか?コードの完全性を確実にするために私がすべき/すべきことは何ですか?

ありがとうございました。

+0

手順2と3の唯一の違いが1つの新しいファイルである場合、私はトランクからブランチをリフレッシュするだけです。私は、上記の方法でマージすると、ブランチ内の新しいファイルが少なくともブランチが知っている限り、トランクには存在しないと思います。 – user1231231412

+0

実際のコードでは、多くのファイルが移動されます。移動したファイルと移動していないファイルの一部が変更されることもあります。 – lwijono

答えて

1

とこれは私がやってしまったものです: 1.リポジトリにブランチをコミットトランク 2からすべての更新(該当する場合)とのブランチ内のすべての名前を変更し、変更されたファイルをマージします。ブランチは、ブランチが最初に作成されて以来、トランクからの変更を含む最新のコードを持っています。 3.ブランチからのすべての変更をトランクにマージします。トランクで更新されたすべてのファイル構造と、トランクと再編成ブランチで発生するすべての変更がありません。

注:トランクで更新され、ブランチ内の別の場所に移動されたファイル。私がする必要があったのは、それらのファイルを削除することだけでした。

ステップ1は面倒なプロセスですが、テストでも機能します。 これは最善の解決策ではないかもしれませんが、私にとっては(トランクとブランチからの更新を維持し、履歴も保存しています)。

+0

私はsvnで大きなエンタープライズプロジェクトを再編成しました。その退屈なプロセスと地獄多くの時間がかかります。ですから、私の推薦は、ブランチを頻繁に最新の状態に保つことです。枝をトランクの背後で走らせてはいけません。そして、あなたは巨大なマージ問題で終わります。 – Sriram

+0

また、同期中(トランクからブランチへ)の​​履歴が失われる可能性があります。 – Sriram

1

あなたが前に/branches/branchname /trunkディレクトリマージ名前を変更し、すべてのをマージをリファクタリングした後二つの方法

1.ピュアSVN方法

を行くことができます/と枝からファイルを移動し、そのトランクオリジナル、つまり/branches/branchname/some/branchfile1 /trunk/trunkfile1 ...とマージディレクトリ最後のステップ

2. DVCS方法

が良いマージを持つ任意のDVCSを使用します(彼らすべてはそれ持っている - のGit、Mercurialは、バザール...)とのsvnブリッジ(のgit-svnの、hgsubversionを... )、DVCSミラーリングされたリポジトリでリファクタリングとマージを実行します。結局のところDVCSツール()でリポジトリ(SVNの履歴、DVCS-DAG)をリポジトリ化してSVN-repoにプッシュします。もしrebaseがあなたにとって難しいタスクであれば、DVCS-of-choice(最終的な結果をSVNのバックグラウンドについてはGitではなくMercurialやBazaarのために)から非バージョンツリーにエクスポートして、トランクの一方向の同期WCこのツリー

+0

方法1を使用すると、サブツリーマージ情報が作成され、さらに再統合マージが不可能になります。 –

+0

方法1を理解する上で問題があります。私が間違っていたら訂正してください。まず、ブランチ内のすべての変更されたファイルを、対応するファイル(オリジナル)とトランクからマージします。次に、ブランチから(ブランチ)リポジトリにコードをコミットする必要があります。次に、ブランチからのリビジョンをトランク(最新)にマージします。これはあなたが意味することですか? – lwijono

+0

@lwijono - ファイルをマージすると、ブランチではなくトランクにマージされます –

関連する問題