3

非常に長い間、すべての開発と展開をトランクから行ってきました。しばらくすると、新機能「B」を実稼働環境に移行するよう要求があったため、実稼働環境がトランクと同期しなくなりましたが、新機能「A」は延期されました。基本的には、トランクからチェックアウトします。一時フォルダーにファイルを選択的にマージし、一時フォルダーから実稼働フォルダーにファイルを選択的にマージします (バージョン管理下にありませんでした)。

あまりにも長い間これに取り組んだ後、最終的にリポジトリを再配置して分岐できるようにすることにしましたが、(svn mv) トランクを移動中にいくつかの間違いを犯したため、ブランチとタグフォルダー (以前はそこにありました) 用のスペースを確保できましたは「トランク」フォルダーではなく、ファイルはプロジェクトの親フォルダーにあるだけでした)、最終的な結果として、「トランク」は、そこから作成したいくつかのブランチよりも新しくなりました。そして今、ブランチからトランクへのマージを行うことができないようです。多くの変更が失われ、多くの競合が発生しています。(すでにトランクからブランチを更新しています。)

トランクで実行svn log --stop-on-copyした場合、最も古いリビジョンは r14376 であり、ブランチで実行した場合、最も古いリビジョンは r14368 です。(HEAD は r14710 にあります)

r14368 と r14376 の間のすべての変更を失わずに適切なマージを行うにはどうすればよいですか? 手動でトランクにマージしようとしましたが、ブランチ ファイルのリビジョン履歴がすべて失われました。

4

3 に答える 3

1

いくつかの異なるマージ コマンドの書き方をいじってみたところ、ようやく必要なものが得られたと思います。私は本質的にマージ引数の順序を逆にして、最初に若いトランクが来て、その後に古いブランチが続き、それらをトランクの作業コピーにマージしました。

$ cd trunk
$ svn update
$ svn merge svn://server/project/trunk@14376 svn://server/project/branches/46@14710 .
--- Merging differences between repository URLs into '.':

その結果、ほんの一握りの競合しか発生しませんでした。そのほとんどは、右側のコピーを受け入れたばかりの画像ファイルに関するものでした。そしてうまくいけば、これにより、将来のブランチとマージが正常に機能する場所に私を置くことができます.

于 2010-09-29T20:56:39.897 に答える
0

リポジトリで何が起こっているのかを詳細に確認せずに答えるのは難しいですが、おそらく現在の「トランク」フォルダを削除してから、元の疑似トランク(つまり、リポジトリルート)をHEADのトランクフォルダにコピーすることができます。これにより、元の疑似トランクが、履歴がそのままの新しい「トランク」フォルダとして提供されると思います。最初にrXでリポジトリルートの変更を開始したとすると、コマンドは次のようになります。

svn rm url/trunk
svn commit -m "Removing broken trunk"
svn cp -rX url/@X url/trunk
svn commit -m "Creating new trunk from previous root"

次に、ブランチをトランクにマージして戻すことができます。トランクコードと競合する場合は、すべてのリビジョンからトランクコードを取り込んだリビジョンを除いたものをマージしてみてください(おそらく、誤って、分離されたコミットとしてトランクの更新を行うと想定しています)。

于 2010-09-29T16:23:55.987 に答える
0

それにもかかわらず、私はあなたに質問のポイントを与えました.私の声明は、あなたが何をしているのかを認識すべきだということです. したがって、社内の誰も、sth が機能していないことをつぶやくことはありません.... svn book でのマージについて読んで
ください: .advanced.advancedsyntax

于 2010-09-29T15:50:47.217 に答える