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

时间:2020-03-06 14:22:18  来源:igfitidea点击:

我的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)。