2009-10-13 13 views
34

私はコミットメントのトンを行った私的なブランチを持っていました。そして、それをトランクにマージし、そこに少し微調整を行いました。SVN:たくさんのリビジョンのdiffを作成します

今、トランクのメンテナーは、私がロールバックが必要なときに、私の変更のすべてとのdiffを望んでいます。

これはどのように作成できますか?あなたの例のための番号が必要な場合は、

224446

私はトランクにマージ、

224453224462

は私のマイナーな修正した、と私は数え切れないほどの変化を持っている私の主な改正だったと仮定私の私的支店にいるとき。 (マーティン経由)

ソリューション

svn diff -r 224452:224453 > ~/tmp/diff.1 
svn diff -r 224462:224463 > ~/tmp/diff.2 
svn up -r224446 
patch < ~/tmp/diff.1 -p0 
patch < ~/tmp/diff.2 -p0 
svn diff -r 224445 > ~/tmp/changes.patch 

はその後保管のため、当社のトランクのメンテナに〜を/ tmp/changes.patchを郵送。

+2

に対してその差分を作成するには、2行目は 'のsvn diffの-r 224461をすべきではありません:224462>〜/ tmp/diff.2'? – Muhd

答えて

31

一つの可能​​な手順はこれを行うには、次のようになります。

  1. (例えばsvn diff -r 224452:224453 > diff1.patchによって)224453と224462のための差分を作成します。
  2. チェックアウト224446(svn up -r224446
  3. は差分を適用する(例えばpatch -p0 -i diff1.patch
  4. は224445(svn diff -r 224445 > diff2.patch
7

オプションは、224446でブランチを作成し、次に224453と224462でマージすることです。それからそのトランクで224445を比較してください。あなたがする必要がある場合にそれは1のすべての変更をする必要があり、あなたはパッチファイルとして作成することができます。

# Branch from your initial checkin 
svn cp svn://xyz/[email protected] svn://xyz/branches/foo 

# Check it out 
svn checkout svn://xyz/branches/foo tmp 

# Merge in the two changes 
svn merge -c 224453,224462 svn://xyz/trunk tmp 

# Commit the changes 
svn commit tmp -m "Extra commits 224453 and 224462" 

# Diff the branch from mainline before original 
svn diff svn://xyz/[email protected] svn://xyz/branches/foo 

これは単に変更を適用し、取得のさまざまな方法で、主にマーティンの答えと同じですdiffs。この場合、私は変更をコミットしましたが、あなたは本当にする必要はありません - 最後の2つのコマンドの代わりにsvn diff svn://xyz/[email protected] tmpを実行するだけでよいことに注意してください。リポジトリに格納することについての良い点は、だれでもは、diffを適用してそれをロールバックすることができます。

+0

は素晴らしいですね。私は非常にSVNに精通していない、いくつかのコマンドを投稿できますか? –

+0

+1のJonのソリューションです。別のリビジョンを追加するとどうなりますか?その後、パッチ全体を再生成する必要があります。あなたがコミットアクセスを持っていないとき、パッチは良いです。 – cetnar

+1

私はJonの解答の追記をほとんど忘れていました。あなたはsvn cpステップと 'svn co svn:// xyz/trunk @ 224446 tmp'だけをスキップすることもできます。これは、リポジトリを直接変更する権限がない場合でも機能します。 –

関連する問題