在我的工作中,我们使用 svn。我在 Windows PC 上使用 tortoisesvn 作为 Windows shell/explorer 扩展。我在 svn 中维护一个 *.c 源文件。我的一位同事在我的版本的基础上做了一些更改并签入,但他没有完全测试他的所有更改!因此,现在的代码在某些测试用例中被破坏了。他说他在 svn 中签入更改时没有正确合并它,因此出现了这种破坏。随便吧!还有其他团队更新了这个文件,所以这会破坏他们的工作。
将此特定文件恢复为较旧的工作版本的命令是什么?(他在本地进行了更改,因此我不会为此烦恼)
如果没有直接命令来执行此操作,我现在该如何摆脱这种困境。
当我阅读时,我听说了“反向合并”。那到底是什么?它对我有帮助吗?如果有帮助,那如何帮助?
答案1
这是反向合并。它将帮您实现您想要的结果。
- 将错误的修订与您想要的修订合并到您的工作副本路径中。
- 测试代码
- 将文件提交回存储库
现在您将拥有一个已修复的修订版,但在存储库中保留了损坏的修订版。
合并命令有三个参数:第一个源、第二个源、工作副本路径。由于您正在回滚,因此两个源将具有相同的路径,但修订号不同。修订号较高的将优先。
命令行示例:
merge svn://example.com/repo/folder/changedFile.txt@HEAD svn://example.com/repo/folder/changedFile.txt@215 ./folder/changedFile.txt
使用 TortoiseSVN 中的“显示日志”按钮可以轻松找到修订版本。
答案2
您还可以通过右键单击“日志消息”窗口中的文件名来反向合并单个文件。
答案3
在提交信息的指导下,您应该能够下载文件的先前修订版本,该修订版本不包含破坏文件的更改。
当然,您最后一次签入的内容包含文件的正确且有效的版本,当您合并时,您通常使用两个源来生成一个新的版本,要么是工作副本,要么是两个独立的分支,因此,您的朋友所做的只是创建一个新的修订版。
从您上次签入时下载文件,该文件应包含更改前的最后一个工作代码。TortoiseSVN 允许您通过指定修订号“签出”来执行此操作,也许您需要探索存储库(使用 TortoiseSVN 存储库资源管理器)并确定所需的修订号。
这是我做事的方法,以前对我来说很有效:)
希望这可以帮助。
答案4
TortoiseSVN 可以为您执行反向合并。转到 SVN 项目的日志页面,右键单击要更改的修订版本,然后选择“恢复”。