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

我在vs08上使用“anksvn”。

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

我的电脑上也有subversion客户端。


当前回答

我认为这是最合适的:

是否合并向后,例如,如果提交的代码包含修订 5612到5616版本,倒着合并。对我来说很管用。

例如:

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

它将包含一个合并的代码回到以前的修订,然后您可以提交它。

其他回答

下面的方法对我很有效。

我有很多本地更改,需要在本地副本中丢弃这些更改,并在SVN中签出最后的稳定版本。

检查所有文件的状态,包括被忽略的文件。 Grep所有行以获取新添加和忽略的文件。 将这些替换为//。 rm -rf所有的直线。 SVN状态——no-ignore | grep '^[?I]' | sed "s/^[?I] //" | xargs -I{} rm -rf "{}"

右键单击要恢复>>恢复或恢复到修订的最高层次结构

以前的大多数答案都是使用反向合并,这通常是正确的答案。然而,有一种情况(刚刚发生在我身上)却不是这样。

我不小心将一个Unix行结束符的文件更改为DOS行结束符时做了一个小更改,并提交了它。这很容易取消,可以通过更改行结束符并再次提交,也可以通过反向合并,但它的效果是使svn blame list my edit作为文件每一行的源。(有趣的是,Windows上的TortoiseSVN不受此影响;只有命令行责备SVN。)

如果要维护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"

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

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

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

Subversion红皮书对此有一个很好的章节。

我认为这是最合适的:

是否合并向后,例如,如果提交的代码包含修订 5612到5616版本,倒着合并。对我来说很管用。

例如:

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

它将包含一个合并的代码回到以前的修订,然后您可以提交它。