6

リポジトリ内のブランチの名前を変更し、同じ作業コピー(名前変更前にそのブランチからチェックアウトされたもの)で不注意に作業を続けました。後でコミットしようとしたときに、作業コピーがまだ古いパスをターゲットにしていることに気付きました。もちろん履歴などを残しながら、リポジトリ内の新しいパスへの変更をコミットしたい...

SVNにはこれを回避するエレガントな方法がありますか?

コマンドの切り替えと再配置について読みましたが、どれも私の問題に完全に適合するかどうかはわかりません(説明されているシナリオは異なります)。SVNでコマンドを試すことについてはいつも少し怖がっています...誰かが持っていますかこれらのコマンドの経験はありますか?

たとえば、名前を変更したプロジェクトを別の作業コピーにチェックアウトしてから、変更内容(SVNメタデータ以外)で上書きすることで、問題を回避できると思います。古いパスのすべての出現箇所を見つけて、それらを新しいパスに残酷に変更するスクリプトを作成することもできますが、これには何らかのSVNコマンドが必要であると考えました。

ありがとう!

4

2 に答える 2

7

リポジトリのURLが変更された場合は、作業コピーを再配置する必要があります。switchコマンドは、作業コピーが指すブランチを変更するために使用されます。概念自体は非常に明確です。

しかし、あなたはプロジェクトについて話しますが、それがあなたが直面している問題だと思います。Subversionの概念ではないため、Subversionのドキュメントにプロジェクトへの参照が見つかりません。

Subversionでプロジェクトを実装する基本的な方法は2つあります。

  1. プロジェクトごとにリポジトリを作成します。

    • https://example.com/svn/foo/trunk
    • https://example.com/svn/bar/trunk
  2. 同じリポジトリ内にプロジェクトごとにブランチを作成します。

    • https://example.com/svn/projects/foo/trunk
    • https://example.com/svn/projects/bar/trunk

したがって、「プロジェクトの名前を変更する」とは、「リポジトリの名前を変更する」(#1)または「ブランチの名前を変更する」(#2)のいずれかを意味し、解決策は次のとおりです。

  1. svn relocate作業コピーをリポジトリに再度リンクするには
  2. 作業コピーに変更を加えるかsvn update(変更が作業コピーディレクトリツリー内にある場合)、またはsvn switch作業コピーが指すブランチを変更します(現在のブランチを効果的に削除した場合)。

更新:これまでの私のアドバイスは、最初から始めることです。現在の作業コピーの名前を変更し、新しいコピーをチェックアウトして、WinMergeやKdiff3(またはTortoiseMerge)などの通常のファイル比較ツールを使用して保留中の変更を再適用します。ログから明らかでない場合、行った正確な変更を見つけようとしてもメリットはありません。

将来のために...完全なSubversionの本を暗記する必要はありませんが、基本的な概念、特に基本的な概念を理解する必要があります。彼らがあなたの毎日の仕事で問題であることが証明されたとき。

于 2012-04-22T12:10:37.477 に答える
0

svnスイッチを使用してみましたか。

switch --relocate OLDURL TO NEWURL

それはあなたの問題を解決するはずです。

于 2012-04-22T11:53:57.120 に答える