如何在不删除其后续修订的情况下切换回文件的先前版本?

时间:2008-09-18 16:35:11

标签: svn

我的subversion存储库中有4个版本的文件A.txt,例如:A.txt.r1,A.txt.r2,A.txt.r3和A.txt.r4。我的文件工作副本是r4,我想切换回r2。我不想使用“ svn update -r 2 A.txt ”,因为这将删除r2之后的所有修订版,即r3和r4。

那么有什么方法可以将我的工作副本更新到r2并且仍然可以选择稍后切换到r3和r4?换句话说,我希望在更新后使用“ svn log A.txt ”仍能看到所有4个版本。

7 个答案:

答案 0 :(得分:26)

制作等于修订版2的A.text的新版本:

svn up -r HEAD
svn merge -r HEAD:2 A.txt
svn commit

另请参阅Undoing changes中的说明。

答案 1 :(得分:10)

命令svn up -r 4仅将本地副本更新为修订版4.

服务器仍然拥有所有版本1到任何版本。

您要做的是创建一个版本,版本号5,与版本号2相同。

cd /repo 
svn up -r 2 
cp /repo/file /tmp/file_2 
svn up -r 4 
cp /tmp/file_2 /repo/file 
svn commit -m "Making 5 from 2" 

如果你改变主意并希望4回来,你可以通过从修订版4创建修订版6来实现。

cd /repo 
svn up -r 4
cp /repo/file /tmp/file_4
svn up -r 5 
cp /tmp/file_4 /repo/file 
svn commit -m "Making 6 from 4" 

快乐的黑客攻击。

(当然有一种方法可以在我认为的2个命令中完成上述操作,但是自从我做了它已经有一段时间了,这可能有点令人困惑)

答案 2 :(得分:3)

我对Subversion没有太多经验,所以如果这种方法在这种环境下不起作用,请原谅。

在这种情况下,我按照以下步骤操作:

  1. 查看相关文件,准备编辑为r4
  2. 使用您需要的修订覆盖文件的本地副本,在本例中为r2
  3. 以适当的评论
  4. 签入/提交该文件的“新”修订版本为r5

    这样,当您浏览文件历史记录时,您会看到类似的内容:

    • R1
    • R2
    • R3
    • R4
    • r5(评论:“恢复为r2内容”)

答案 3 :(得分:3)

svn update -r 2 A.txt

此命令将删除存储库中的任何版本。它会将A.txt的工作副本设置为修订版2.您可以通过执行

来查看
> svn status -u A.txt
  *     2   A.txt

此命令的输出显示您正在查看版本2,并且有更新(即*)。

执行此更新后,您 仍然可以执行“ svn log ”并查看所有修订。

执行“ svn update A.txt ”将返回最新版本(在您的情况下为r4)。

答案 4 :(得分:2)

更新到较旧的转速不会删除您的较新转速。

所以你可以svn up -r2 file,然后svn up -r4 file

另外,你不能以这种方式提交r2文件,因为你必须在提交前更新,你最终会再次使用r4。

答案 5 :(得分:2)

  

“我不想使用”svn update -r 2 A.txt“因为这将删除r2之后的所有修订版,即r3和r4。”

实际上,呃......实际上不会。试一试:在-r 2之后进行常规的svn更新,你会看到工作副本更新回到r4。

答案 6 :(得分:1)

更新不会删除服务器上的任何修订。它所做的唯一更改是您的本地工作副本:

SVN Update Command

“将存储库中的更改带入您的工作副本”

“将工作副本同步到--revision switch”

给出的修订版