我正在和一个朋友一起做一个项目,我想返回到我们代码的旧版本,并将其设置为当前版本。我该怎么做?
我在vs08上使用“anksvn”。
我的电脑上有我想要的版本,但提交失败;我得到的信息是 "提交失败,文件或目录已过期。"
我的电脑上也有subversion客户端。
我正在和一个朋友一起做一个项目,我想返回到我们代码的旧版本,并将其设置为当前版本。我该怎么做?
我在vs08上使用“anksvn”。
我的电脑上有我想要的版本,但提交失败;我得到的信息是 "提交失败,文件或目录已过期。"
我的电脑上也有subversion客户端。
当前回答
右键单击项目>替换为>修订或URL >选择要恢复的特定修订。
现在将本地更新代码版本提交到存储库。这将把代码库恢复到特定的修订版本。
其他回答
基本上你需要“向后合并”——将当前版本和以前版本之间的差异应用到当前版本(因此你最终会得到一个看起来像旧版本的工作副本),然后再次提交。例如,从150版(目前)回到140版:
svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"
Subversion红皮书对此有一个很好的章节。
有点老派
svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch
然后是通常的
svn diff
svn commit
乔恩·斯基特的回答基本上就是一个简单的解决方案,但如果你和我一样,你可能想要一个解释。Subversion手册将其称为
择优挑选合并
从手册页。
This form is called a 'cherry-pick' merge: '-r N:M' refers to the difference in the history of the source branch between revisions N and M. A 'reverse range' can be used to undo changes. For example, when source and target refer to the same branch, a previously committed revision can be 'undone'. In a reverse range, N is greater than M in '-r N:M', or the '-c' option is used with a negative number: '-c -M' is equivalent to '-r M:'. Undoing changes like this is also known as performing a 'reverse merge'.
如果源是一个文件,则对该文件应用差异 文件(用于反向合并早期更改)。否则, 如果源是一个目录,那么目标默认为'.'。 在正常使用情况下,工作副本应该是最新的 修订,没有局部修改和切换子树。
例子:
svn merge -r 2983:289 path/to/file
这将用来自服务器的修订289替换本地副本[2983](根据上面的引用,它应该与服务器同步—您的责任)。更改发生在本地,这意味着如果您有一个干净的签出,那么可以在提交更改之前检查更改。
这就是我所做的,为我工作。
我想撤消在多次提交中所做的更改,并希望转到以前的提交点。
去团队->显示历史。 右键单击要忽略的修订或范围。 选择“恢复更改”选项。
这将运行反向合并,撤销工作副本中的更改。
只需检查代码并提交即可。
同步到旧版本并提交。这应该能奏效。
这里还解释了撤消更改。