2009-10-13 50 views
34

我有一个私人分支,我做了大量的提交,然后我将它合并到树干中,并在那里做了一些小的调整。SVN:为大量修订创建差异

现在,主干维护者想要差异化我所有的更改,因此我们需要回滚。

我该如何创建?如果你需要的数字为你的例子,假设

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

一个差异不应该第二行是'svn的差异-r 224461 :224462>〜/ tmp/diff.2'? – Muhd 2011-09-27 22:40:51

回答

31

一种可能的程序是这样做:

  1. 为224453和224462(例如,通过svn diff -r 224452:224453 > diff1.patch)创建的diff。
  2. 退房224446(svn up -r224446
  3. 应用diff文件(如patch -p0 -i diff1.patch
  4. 创建的,对224445(svn diff -r 224445 > diff2.patch
7

一个选项是在224446创建一个分支,然后在224453和224462中合并。然后在中继线和224445之间进行比较。这应该是一个所有的变化,您可以创建它作为一个补丁文件如果您需要:

# 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 

这是大致相同马丁的回答,只是应用的变化,得到不同的方式diff文件。请注意,虽然在这种情况下,我已经提交了更改,但您并不需要 - 您只需执行svn diff svn://xyz/[email protected] tmp而不是最后两个命令。有关它在存储库中的好处是然后任何人都可以反向应用diff来回滚,如果需要的话。

+0

听起来不错。我对SVN不是很熟悉,你可以发布一些命令吗? – 2009-10-13 06:38:18

+0

乔恩的解决方案+1。当你添加另一个版本时怎么样?然后整个补丁需要重新生成。当你没有提交acces时,补丁很好。 – cetnar 2009-10-13 07:14:30

+1

我几乎错过了Jon的解决方案后记;你也可以跳过svn cp步骤,只是'svn co svn:// xyz/trunk @ 224446 tmp'。即使您没有权限直接更改存储库,这也可以工作。 – 2011-10-27 19:56:01