3

開発チームがリポジトリ内のファイル構造を再編成したいという状況に直面しています。このプロセスには約 2 ~ 3 か月かかります。ファイルの再構築中に、ソフトウェアのリリースを行う必要があります。そのため、再構造化プロセスの後、整理されたファイルをブランチからトランクにマージしたいと考えています。ファイルの履歴を保存することは重要であり、最初にブランチを作成してからのトランクのコード変更をマージできる必要もあります。

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

  1. トランクからブランチを作成しました
  2. トランク内のファイルを更新する
  3. ファイルをブランチに移動する
  4. ブランチのファイルを更新する
  5. ブランチからトランクへのマージの実行

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

私と同じ状況に陥った経験のある人はいますか?コードの整合性を確保するために私がすべき/できる提案/ベストプラクティスはありますか?

すべての助けに感謝します。

4

2 に答える 2

2

あなたは2つの方法で行くことができます

1.Pure-SVNメソッド

ディレクトリをマージする前に リファクタリングした後、ブランチから名前を変更/移動したすべてのファイルをトランクの元のファイルとマージします。つまり、最後のステップでdirsをマージします。/branches/branchname /trunk /branches/branchname/some/branchfile1 /trunk/trunkfile1

2.DVCS方式

良好なマージ(Git、Mercurial、Bazaar ...)とsvn-bridge(git-svn、hgsubversion ...)を備えたDVCSを使用し、DVCSミラーリポジトリでリファクターマージを実行します。結局のところ、DVCSツール(... rebase)を使用してリポジトリ(SVN履歴の行、DVCS -DAG)を線形化し、結果をSVN-repoにプッシュします。リベースが難しすぎる場合は、DVCS-of-choice(SVNバックグラウンドの場合はGitではなくMercurialまたはBazaarについて考えます)から最終結果をバージョン管理されていないツリーにエクスポートし、トランクの一方向同期WCを実行できます。この木で

于 2012-01-24T11:51:58.293 に答える
2

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

注:トランクで更新され、ブランチ内の別の場所に移動されたファイルでは、引き続きツリーの競合が発生することが予想されます。私がする必要があるのはそれらのファイルを削除することだけでした。

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

于 2012-01-25T17:35:19.027 に答える