如何在Subversion中返回到旧版本的代码?

我正在和一位朋友一起工作,我想回到我们的代码的旧版本,并将其设置为当前的。 我该怎么做?

我在vs08上使用“anksvn”。

我有我想要在我的电脑上的版本,但提交失败; 我得到的消息是“提交失败,文件或目录已过期”。

我的电脑上也有颠覆客户端。

基本上你需要“向后合并” – 在当前版本和以前的版本之间应用差异当前版本(所以你最终得到一个看起来像旧版本的工作副本),然后再次提交。 例如,从修订版150(现在)回到修订版140:

svn update svn merge -r 150:140 . svn commit -m "Rolled back to r140" 

颠覆红皮书有一个很好的部分 。

您无法直接使用您PC上的良好副本的原因是,.svn文件夹知道它是过去的代码,因此需要更新。 但是你只能在颠覆历史的头部实际上做出改变。

您可以使用

svn update -r <earlier_revision_number>

检查你的项目的各种旧版本,直到你find正确的版本号,你的好版本。 当你find它的时候,更新到最新的(head)修订版本,然后按照上面的build议应用svn merge。

如果你真的无法find它,并需要在PC上提交副本,那么重新更新到最新版本,然后将“好”版本复制到最上面( 没有 .svn文件夹!)。 从文件夹中删除不在副本中的任何文件,并从现在开始提交。

只是使用这一行

svn更新-r yourOldRevesion

你可以通过使用知道你当前的版本

svn信息

如果这是你想要做的,使用合并来撤销整个签入的标准方式是非常好的。 但有时候,你想要做的只是恢复一个文件。 没有办法做到这一点,但有一个黑客:

  1. 使用svn logfind你想要的版本。
  2. 使用svn的export子命令:

    svn export http:// url-to-your-file @ 123 / tmp / filename

(其中123是该文件的良好版本的修订版本号。)然后移动或复制该单个文件以覆盖旧文件。 检查修改后的文件,你就完成了。

多一点老派

 svn diff -r 150:140 > ../r140.patch patch -p0 < ../r140.patch 

然后通常

 svn diff svn commit 

我认为这是最适合的:

例如,如果提交的代码包含从rev 5612到5616的修订版本,则向后合并。 它在我的工作。

例如:

 svn merge -r 5616:5612 https://<your_svn_repository>/ 

它将包含一个合并的代码回到以前的版本,然后你可以提交它。

右键单击要恢复的最高级别>> RevertRevert to Revision

这就是我为我工作的。

我想撤消多次提交中的更改,这些更改是在某些时间执行的,并且希望转到上一个提交点。

  1. 转到团队 – >显示历史。
  2. 右键单击要忽略的修订版本或范围。
  3. select“恢复更改”选项。

这将运行一个反向合并,撤消工作副本中的更改。

只需查看代码并提交。

右键单击项目>replace为>版本或URL>select要恢复的特定版本。

现在将本地更新代码版本提交到存储库。 这将把代码库恢复到特定的版本。

大多数以前的答案已经使用了反向合并,这通常是正确的答案。 但是,有一种情况(刚好发生在我身上)不在的地方。

我做了一个小小的修改,意外地把一个Unix行结尾的文件改成了DOS行结尾,并提交了。 这很容易被撤消,要么通过改变行结束和再次提交,要么通过反向合并,但它使得svn blame列出我的编辑作为文件的每一行的来源。 (有趣的是,Windows上的TortoiseSVN不受这个影响;只有命令行svn blame 。)

如果你想保持由svn blame报告的历史,我认为你需要做以下几点:

  • 删除文件并提交。
  • 在存储库中,将以前的文件复制到头部,并提交。
  • 还原您想要保留的所有修改。

删除有点吓人,但请记住,您始终将文件保存在存储库中,因此恢复该文件并不是什么大问题。 这里有一些代码来说明这些步骤。 假设xxx是最后一个好副本的版本号。

 svn rm svn+ssh://path/to/file svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy" svn update <restore the edits> svn commit -m"Restore edits" 

请注意,对于存储库中的副本,目标需要是目录,而不是文件名。

同步到旧版本并提交。 这应该做的伎俩。

这里也是撤消更改的解释。

这对我有效。 我有很多本地更改,需要放弃在本地副本,并检出SVN中的最后一个稳定版本。

1检查所有文件的状态,包括被忽略的文件

2 grep所有行来获取新添加和忽略的文件。

3用//replace那些

4和rm -rf所有行。

svn status --no-ignore | grep '^[?I]' | sed "s/^[?I] //" | xargs -I{} rm -rf "{}"

希望这可以帮助。