0

私の作業コピーはトランクを指していました。トランクにコミットする準備ができていない大きなコード変更がありましたが、バージョン管理下に置きたいので、Branch することにしました (Head からではなく、Working Copy からリポジトリ コピーを作成し、 を選択しますSwitch to Branch)。操作の最後にエラーが発生しました。One or more files are in a conflicted state.それは奇妙に思えます。私の作業コピーが、私の作業コピーから作成された新しいブランチとどのように衝突するのでしょうか?

手がかり: 特定のツリーの競合を調べると、次のようなメッセージが表示されます:The last switch operation tried to delete/move/rename the file "xxx.cs", but the file was deleted, moved or renamed locallyおよび他の同様のメッセージ。(ブランチの前に、いくつかのファイルを新しいフォルダーに移動し、いくつかのファイルの名前も変更しました)。

履歴を失うことを恐れずに、競合を解決済みとして安全にマークし、「ローカル ファイルを保持する」(「ローカルに追加されたファイル」の競合の場合) ことはできますか?

4

1 に答える 1

0

これは部分的な回答です。「作業コピーが、作業コピーから作成された新しいブランチと競合する可能性があるのはなぜですか?」利用可能な情報で。何が起こったのか正確にはわかりませんが、あなたは 2 つの論理チェンジセット (おそらく HEAD からではない新しいブランチとコミットされていない作業) を 1 つとしてコミットしようとしましたが、これは良いスタートではありません。Subversion のベスト プラクティスを参照してください。

コミットされていない変更でトランクのブランチをきれいに作成し、リポジトリ ブラウザを使用せずに、作業コピーがトランクで最新でない場合は、まず作業コピーを更新します。次に、トランクのクリーンで更新されたコピーをブランチフォルダー(チェックアウトしたままにしておく)にsvnコピーし、ブランチをコミットします。外部があればsvn updateします。または、リポジトリ ブラウザーでトランクから分岐し、その分岐をチェックアウトします。

次に、ブランチ内の .svn 以外のすべてを削除 (svn 削除ではなく) し、現在のワーキング セットをコピーしてブランチに貼り付け、名前変更と移動を修正して履歴を保持します (「移動の修復」が tsvn コミット ダイアログで利用できるようになりましたこれを支援するために)、別の操作として変更をコミットします。

質問に答えるには、「競合を解決済みとして安全にマークし、(「ファイルがローカルに追加された」競合の場合は) 「ローカル ファイルを保持」しても、履歴が失われる心配はありませんか?」すべての作業がコミットされていれば (svn logを参照)、作業コピーをクリーンアップするだけです。ただし、念のため、この作業コピーの名前を変更して脇に置いておきます。次に、ブランチの新しいコピーをきれいにチェックアウトし、そこで作業を再開します。ここで何が起こったのかについて 100% 明確ではないため、私は断固として安全な選択肢を選びます。

また、新しいブランチをトランクにマージして戻すことを今すぐテストすることをお勧めします。これは不可能ではないため、マージして戻すときに苦労することになります。テスト マージが失敗した場合は、ブランチを再度ブランチすることをお勧めします。これにより、トランクのクリーンで変更されていない最新のコピーでブランチを開始していることを確認してください。

于 2014-10-26T10:57:06.393 に答える