SVN:为多个版本创建差异(diff)

34

我有一个私有分支,进行了大量提交,然后将其合并到主干中,并在那里进行了一些微小的调整。

现在主干维护者希望获得我所有更改的差异,以防需要回滚。

我该如何创建这个差异?如果您需要示例数字,请假设

224446

是我合并到主干中的主要修订版本,

224453224462

是我的次要修复程序,在我的私有分支中进行了无数次更改。


2
第二行不应该是 svn diff -r 224461:224462 > ~/tmp/diff.2 吗? - Muhd
2个回答

31
一种可能的步骤是这样做:
1. 为224453和224462创建差异文件(例如通过`svn diff -r 224452:224463 > diff1.patch`)。 2. 检出224446(`svn up -r224446`)。 3. 应用差异文件(例如`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/trunk@224446 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/trunk@224445 svn://xyz/branches/foo

这与马丁的回答基本相同,只是应用更改和获取差异的方式不同。请注意,虽然在此情况下我已经提交了更改,但您并不一定要这样做 - 您可以仅执行 svn diff svn://xyz/trunk@224445 tmp而不是最后两个命令。将其放在存储库中的好处是任何人都可以将差异反向应用来回滚,如果需要的话。


听起来不错。我对SVN不是很熟悉,你能发一些命令吗? - Paul Tarjan
Jon的解决方案很好。但是如果你添加了另一个修订版本呢?那么整个补丁需要重新生成。当您没有提交访问权限时,补丁非常有用。 - cetnar
1
我差点错过了Jon解决方案的附言; 你也可以跳过svn cp步骤,只需 svn co svn://xyz/trunk@224446 tmp。即使您没有直接更改存储库的权限,这也可以正常工作。 - Thomas S. Trias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接