如何在不删除其后续修订版本的情况下切换回文件的先前版本?
我的Subversion存储库中有文件A.txt的4个版本,例如: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个修订。
解决方案
更新到较旧的版本不会删除较新版本。
因此我们可以先执行svn up -r2文件,然后执行svn up -r4文件。
同样,我们将无法以这种方式提交r2文件,因为在提交之前必须先进行更新,然后我们将再次获得r4.
"I don't want to use "svn update -r 2 A.txt" because this will delete all the revisions after r2, namely r3 and r4."
嗯...实际上不会。尝试一下:在-r 2之后进行定期的svn更新,我们会看到工作副本已更新回r4.
更新不会删除服务器上的任何修订。它所做的唯一更改是对本地工作副本的更改:
SVN更新命令
"将存储库中的更改引入工作副本中"
"将工作副本同步到--revision开关给定的修订版本"
我在Subversion方面没有太多经验,所以如果这种方法在这种环境下不起作用,请原谅。
在这种情况下,请按照以下步骤操作:
- 检出有问题的文件,准备将其编辑为r4
- 用所需的修订版本覆盖文件的本地副本,在这种情况下为r2
- 签入/提交该文件的"新"修订为r5,并带有适当的注释
这样,当我们浏览文件历史记录时,我们将看到类似以下内容的内容:
- 11
- 22
- 33
- 44
- r5(注释:"已还原为r2内容")
命令" 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的A.txt的新修订版:
svn up -r HEAD svn merge -r HEAD:2 A.txt svn commit
另请参阅撤消更改中的描述。
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)。