21

CVS と Subversion はどちらも便利なマージ機能を備えているため、変更したソース ファイルを更新すると、他のユーザーが同じファイルに対して行った変更がマージされます。

ただし、自分の変更と他の変更に互換性がない場合 (通常、コードの同じ部分を両方とも変更した場合)、競合が発生します。ソース コードの両方のストレッチがマージされたファイルに含まれるため、保持する変更を手動で分類する必要があります。これまでのところすべて順調です。

私の問題は、私たちの何人かが異なる開発環境 (Netbeans と vi を知っておく必要があります) を使用しており、Netbeans にはコードを再インデントする自動インデント機能があることです。したがって、変更をマージすると、ほとんどがインデントの単純な変更によって引き起こされ、コードへの真の変更ではない大きな競合が発生することがあります。多くの場合、これらは手動で解決しなければならない数百行の明白な競合を作成しますが、通常、実際の変更は数行にまで及びます。誰かの編集者が unix を Windows の改行に、またはその逆に変更した場合にも、同様の状況が発生します。

では、2 つのバージョンを比較するときに、これらの「競合」を無視するようにマージを設定できますか? Diff には --ignore-space-change または -b オプションがあり、基本的に同じ機能を cvs または svn で利用できるようにしたいと考えています。私たちはそれぞれのツールをさまざまなプロジェクトで使用しているため、どちらかまたは両方について回答をいただければ幸いです。

最後に 2 つの注意事項:

  • 明らかに、マージ プロセスでは、マージされたファイルで使用する空白のバージョンを任意に選択する必要があります。後でいつでも再フォーマットできます。
  • より規律を守り、より頻繁にチェックインすることで、これの一部を回避できました-認められ、理解されました. しかし、私は完璧ではありません。
4

3 に答える 3

11

SVN の場合: コマンドライン ツールには、スペースの変更を無視するために " b " または " w " に設定できるオプション-xがあります。すべてのスペース。 マージを行うためのサードパーティ ツールを提供することもできます。したがって、空白を無視するマージがある場合は、これを使用できます。TortoiseSVN は、いつものように、すべてのパラメータのフロントエンドであるため、空白の無視もサポートします。

svn merge コマンドについては、こちらで説明しています。必要なオプションは--diff3-cmdです

于 2008-10-10T22:57:22.183 に答える
5

Windows ユーザーの場合、TortoiseSVN (Subversion の Windows Explorer シェル拡張) を使用できます。これには、記述内容をサポートするマージ機能が付属しています。

行末を無視すると、行末スタイルの違いのみによる変更が除外されます。

空白の比較には、追加/削除された行として、インデントとインライン空白のすべての変更が含まれます。

空白の変更を無視すると、空白の量またはタイプの変更のみに起因する変更が除外されます。インデントを変更するか、タブをスペースに変更します。以前は空白がなかった場所に空白を追加したり、空白を完全に削除したりしても、変更として表示されます。

すべての空白を無視すると、すべての空白のみの変更が除外されます。

于 2008-10-10T23:16:12.020 に答える