1

トランクと並行して機能する機能ブランチを作成しました。

ブランチでは、大量の構造 (フォルダー) の変更を行いました。たとえば、以前にオンになっていたフォルダーを移動しました。

application/views/scripts/users/*

に:

application/modules/user/views/scripts/users/*

今、トランクからこの機能ブランチへのマージを行おうとしていますが、何百万ものツリー競合が発生しています! 問題は、このツリーの競合が発生するため、そのツリー内のファイルが何に対してもマージされないことです。

つまり、次の場所でツリーの競合が見つかりました。

application/views/scripts/users (SVN message: "The last merge operation tried to modify the directory 'users', but it was deleted, moved or renamed locally")

そのパス内にあったファイルやその他のフォルダーはどれもマージされていません。

フォルダの元の場所と現在の場所の間の「リンク」を回復する方法はありますか?

この問題に対処するために何かできることはありますか?

4

2 に答える 2

0

解決策以上に、私が使用した回避策を提供できます。これには実際には解決策がないように思われるからです。

少し調査した結果、SVN がこの種のマージ機能をサポートしていないことはほぼ確実です。TortoiseSVN のドキュメントでは、次のように述べられています。

ローカルで欠落している、マージ時に受信する編集

トランクに取り組んでいる開発者 A が Foo.c を変更し、リポジトリにコミットします。

ブランチで作業している開発者 B は、Foo.c を Bar.c に移動し、それをリポジトリにコミットします。

開発者 A のトランクの変更を開発者 B のブランチの作業コピーにマージすると、ツリーの競合が発生します。

Bar.c は、ステータスが「通常」の作業コピーに既に存在します。

Foo.c は、ツリーの競合により不足しているとマークされています。

この競合を解決するには、開発者 B は競合エディター ダイアログでファイルを解決済みとしてマークする必要があります。これにより、競合リストからファイルが削除されます。次に、不足しているファイル Foo.c をリポジトリから作業コピーにコピーする、開発者 A の Foo.c への変更を名前が変更された Bar.c にマージするか、競合を解決済みとしてマークして変更を無視するかを決定する必要があります。そして他に何もしていません。

これは、一度に 1 つのツリーの競合について、何をすべきかを決定する必要があることを意味します。そして、これは最悪の部分ではありません。私の場合、本当に受け入れられないのは、トランクからこのブランチへの新しいマージを行うたびに、この競合に再び対処する必要があるということです。

回避策

ブランチに加えられた構造上の変更をトランクに (必要なコードの変更と共に) レプリケートし、それを使用できるようにします。

これをコミットすると、ファイルの両方の構造が変更され、トランクとブランチが一致するため、後でマージ操作で問題が発生することはなくなります。

于 2012-06-13T15:30:33.400 に答える
-1

あなたの問題から私が理解しているのは、ブランチで多くのフォルダー構造の変更を行っており、これらの変更がトランクにないため、マージしようとするとエラーが発生するということです。

あなたの声明によると、「今、トランクからこの機能ブランチへのマージを試みています」

最初に、トランクからブランチを取り出し、ブランチで構造変更を行った場合、これらの変更を「ブランチからトランク」にマージするか、単に元の構造を取得したい場合 (「元の場所を復元する」)フォルダーの") ブランチで行った変更を元に戻すだけです。

お役に立てれば。

于 2012-06-13T11:56:37.497 に答える