web-dev-qa-db-ja.com

2つの異なるリポジトリ間でのSVNの差分

私は2つのリポジトリを持っています。トランクコードは保護された1つのリポジトリにあったため、チェックアウトしてから他のリポジトリにチェックインしました(ユーザーには最初の保護されたリポジトリへのアクセス許可がなかったため)。

ここで問題となるのは、両方のリポジトリが処理されており、最終的に2番目の保護されていないリポジトリのコード/ブランチを保護されているリポジトリとマージしたいということです。しかし、これらには矛盾があります。

2つのリポジトリブランチの差分を見つける方法はありますか?また、空白の変更がある場合、それらを無視するにはどうすればよいですか?

21
gagneet

これを可能にする組み込みの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

25
Cygon
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

これにより、両方のファイルのブランチとリビジョン番号の両方を指定できます。実行したばかりなので、機能することはわかっています。

31

このマージを行うための最良のツールは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を使用します

5
William Pursell

Kdiff3のようなツールを使用して、両方のリポジトリからチェックアウトされた作業コピーを単純に比較できます。 (2つのディレクトリをポイントするだけで、それらのすべてのファイルが再帰的に比較されます。)

3
Amber

Linuxを使用している場合は、「meld」ツールを使用することもできます...それは大きな違いを生み、簡単にマージを行うことができます...

1

おそらく最も簡単なことは、両方のブランチをチェックアウトし、 winmerge のようなツールを使用することです(これにより、スペースを無視して複数の比較を行うことができます)

1
Sam Saffron

以下は機能しますが、遅くなります。

svn diff [url1] [url2]
1
Jonathan

この状況に陥ったときはいつでも Meld を使用します。これは、マルチプラットフォームのGUI比較ツールです。ファイルとファイル、またはディレクトリとディレクトリを比較できます。あなたの場合、両方のプロジェクトを別々のディレクトリにチェックアウトし、meldを使用して比較することができます。変更(リネサまたはブロック)をあるファイルから別のファイルに非常に簡単に移動できます。

diffもいいです!

0
Gapster