8

実行しているとき、svn up私は定期的にこのプロンプトに遭遇します:

Conflict discovered in 'lib/somelibrary.so'.
Select: (p) postpone,
        (mf) mine-full, (tf) theirs-full,
        (s) show all options:

ヒットすると、sオプションmctc、mine-conflictおよびtheirs-conflictが明らかになります。これにより、自分のバージョンまたはそのバージョンのいずれかを、だけでなくすべての競合に使用できるようになりますsomelibrary.so

ただし、これらのオプションは機能しません。このメッセージが表示されます:

Invalid option; cannot choose based on conflicts in a binary file.

mcエドウィンの答えは、私がどのように機能するかを誤解していることを明らかにしていますがtc、それでも、競合するすべてのファイルに対して同じ解像度を使用できるようにしたいと考えています。初めての後に再度プロンプトを表示せずに、svnを使用しmfたり、すべての競合に使用したりする方法はありますか?tf

4

2 に答える 2

11

、、の競合を自動的に解決するにはsvn update、フラグを使用します。svn switchsvn merge--accept

SVNブックから-svnoptions :

--acceptACTION
自動競合解決のアクションを指定します。可能なアクションは、延期、ベース、鉱山フル、彼らのフル、編集、および起動です。

svn resolve 各アクションの意味は、仕様で確認できます。

必要な解像度に応じて、次の引数を--acceptコマンドに渡すことができます。

base作業コピーを更新する前にBASEリビジョンであったファイルを選択します。つまり、最新の編集を行う前にチェックアウトしたファイルです。

作業中競合解決を手動で処理したと仮定して、作業コピーに現在あるファイルのバージョンを選択します。

mine-full svn updateを実行する直前に存在していたファイルのコピーを使用して、競合するすべてのファイルを解決します。

theirs-full svn updateを実行したときにサーバーからフェッチされたファイルのコピーを使用して、競合するすべてのファイルを解決します。

mine-conflict各ファイルのコンテンツの競合する領域でサーバーからフェッチされた変更よりもローカルの変更を優先することにより、競合するすべてのファイルを解決します。

theirs-conflict各ファイルのコンテンツの競合する領域でのローカルの変更よりも、サーバーからフェッチされた変更を優先することにより、競合するすべてのファイルを解決します。

また、「競合を解決する」セクションも確認してください。

最後に、例。mine-full更新時にすべての競合を自動的に解決するには、次のコマンドを実行します。

$ svn up --resolve mine-full
于 2012-01-28T14:35:28.323 に答える
1

mcとtcはマージオプションであり、競合している行のみを考慮し、ソース(mc)または「その他の」ソース(tc)のいずれかからの行をマージします。

バイナリファイルは通常、行が含まれるように構造化されていないため、あるテキスト行を別のテキスト行に置き換えることに基づく競合解決アルゴリズムは、バイナリファイルでは正しく機能しません。SVNを作成した開発者はこれを知っているため、バイナリファイルを処理する場合、テキストファイルでのみ意味のあるオプションは受け入れられません。

少し異なるmfとtfを使用できます。ファイルの競合する領域だけを置き換えるのではなく、ファイル全体を(mf)完全なファイルの「my」コピー、または(tf)完全なファイルの「their」コピーに置き換えます。

SVNで「mc/tcファイルオプションをシャットダウンして受け入れる」ようにする場合は、svnでmime-typeを編集し、テキストに設定します。それがテキストファイルでない場合は幸運です。開始バイナリファイルの仕様の範囲外のファイルが取得される可能性があります(たとえば、2つのjpegファイルの連続セクションをマージしても有効なjpegファイルは生成されません)。

于 2012-01-27T21:03:50.833 に答える