如何在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信息
如果这是你想要做的,使用合并来撤销整个签入的标准方式是非常好的。 但有时候,你想要做的只是恢复一个文件。 没有办法做到这一点,但有一个黑客:
- 使用svn logfind你想要的版本。
-
使用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>/
它将包含一个合并的代码回到以前的版本,然后你可以提交它。
右键单击要恢复的最高级别>> Revert
或Revert to Revision
这就是我为我工作的。
我想撤消多次提交中的更改,这些更改是在某些时间执行的,并且希望转到上一个提交点。
- 转到团队 – >显示历史。
- 右键单击要忽略的修订版本或范围。
- 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 "{}"
希望这可以帮助。