私は2つのリポジトリを持っています。トランクコードは保護された1つのリポジトリにあったため、チェックアウトしてから他のリポジトリにチェックインしました(ユーザーには最初の保護されたリポジトリへのアクセス許可がなかったため)。
ここで問題となるのは、両方のリポジトリが処理されており、最終的に2番目の保護されていないリポジトリのコード/ブランチを保護されているリポジトリとマージしたいということです。しかし、これらには矛盾があります。
2つのリポジトリブランチの差分を見つける方法はありますか?また、空白の変更がある場合、それらを無視するにはどうすればよいですか?
これを可能にする組み込みのSubversion機能はわかりませんが、両方のリポジトリの完全なチェックアウトを作成し、コマンドラインのdiffユーティリティを使用して両方の作業コピーを比較できます。
diff -w -u -r -N WorkingCopy1 WorkingCopy2
-w
すべての空白を無視する-u
統一されたdiff形式(Subversionなど)を使用するには-r
再帰的-N
パッチに新しいファイルを表示させる
これは確かに最速のアプローチではありませんが、1回限りのプロセスでは許容できる場合があります。出力をファイルにリダイレクトしてパッチを作成することもできますdiff -w -u -r -N WorkingCopy1 WorkingCopy2 > wc1-to-wc2.patch
Windowsを実行している場合、diffとパッチのwin32ビルドはここにあります: http://gnuwin32.sourceforge.net/packages/diffutils.htm
svn diff --old=URL1@rev1 --new=URL2@rev2
例:
svn diff --old=http://svn.whatever.com/trunk/myfile.txt@1234 --new=http://svn.whatever.com/branch/myfile.txt@5678
これにより、両方のファイルのブランチとリビジョン番号の両方を指定できます。実行したばかりなので、機能することはわかっています。
このマージを行うための最良のツールはgit-svnかもしれません。 2つのリポジトリのURLが$ URL1と$ URL2の場合は、次のことを試してください。
$ git svn clone $ URL1 svn1 $ git svn clone $ URL2 svn2 $ cd svn1 $ git fetch../svn2 $ git diff FETCH_HEAD master
空白の変更を無視するには、git diff-wを使用します
Kdiff3のようなツールを使用して、両方のリポジトリからチェックアウトされた作業コピーを単純に比較できます。 (2つのディレクトリをポイントするだけで、それらのすべてのファイルが再帰的に比較されます。)
Linuxを使用している場合は、「meld」ツールを使用することもできます...それは大きな違いを生み、簡単にマージを行うことができます...
おそらく最も簡単なことは、両方のブランチをチェックアウトし、 winmerge のようなツールを使用することです(これにより、スペースを無視して複数の比較を行うことができます)
以下は機能しますが、遅くなります。
svn diff [url1] [url2]
この状況に陥ったときはいつでも Meld を使用します。これは、マルチプラットフォームのGUI比較ツールです。ファイルとファイル、またはディレクトリとディレクトリを比較できます。あなたの場合、両方のプロジェクトを別々のディレクトリにチェックアウトし、meldを使用して比較することができます。変更(リネサまたはブロック)をあるファイルから別のファイルに非常に簡単に移動できます。
diffもいいです!