5

我做了一些更改并将它们提交(到版本 2),并在几分钟后发现它们在我的程序中引入了新的错误。所以我将一些文件切换到旧版本,以便在我的本地平台上将一些文件恢复到版本 1。从那以后,我做了很多我不想丢失的更改,并且我使用提交(版本 3)在服务器上获取我的本地更改。

我在本地拥有的版本正是我想要在存储库中作为主要修订版的版本,即使某些文件仍然正式在“版本 1”上。我认为我应该以某种方式使用 SVN 合并,但我不确定该怎么做。有什么建议吗?

编辑:当我使用 diff 时,它显示从本地版本到代表版本的更改。我可以进行更新,但随后我将再次在本地获得一个非工作版本。所以我想要的是某种强制提交,只是说“这是最新版本,期间”。

edit2:在执行“提交”时,SVN 报告没有更改。感谢 Neil Butterworth 的提问。

编辑3:我最后做了什么,仅供参考:我应该只是使用蒂姆的建议,但我愚蠢到可以在没有真正考虑我在做什么的情况下进行更新。当然,那时一切都变得一团糟,无法修复。所以我最后做的就是将项目导出到一个新目录。这显然不是你应该这样做的方式,但我不想再弄乱这些东西了。最后,我不得不重新开始在实际项目上取得实际进展;-) 我知道当我在一个更大的团队中工作时,我不能做那样的事情,但我不是:)

4

3 回答 3

9

蛮力方式:

  1. 制作本地文件的副本。
  2. 删除所有目录中的所有 .svn 文件
  3. 查看 HEAD 版本。
  4. 将本地文件复制到签出的 HEAD 上。
  5. 将本地文件检查回存储库。

如果操作正确,SVN 客户端应该将更改的文件解释为对存储库的更新。但是,这将覆盖您可能希望保留的其他人所做的任何更改。如果您想保留这些更改,请先对所有文件进行比较并合并所有最近的更改,然后再进行最终提交。

反向合并回原始版本:

  • 对于每个更改的文件,
    1. 比较差异,记下您想要保留的更改,并相应地更改您的本地副本。
    2. 制作本地文件的副本。
    3. 将 HEAD 反向合并回所需的原始版本。
    4. 将本地文件的副本粘贴到合并的本地副本上。(先删除.svn)
    5. 犯罪

这可能更手动,除非您只是在不检查任何更改的情况下恢复所有内容。

Subversion,AFAIK,还没有提供删除命令,所以所有更改总是发生在 HEAD 的本地副本上。

还原只是反向合并,所有合并总是发生在您的本地副本上。在理想的系统中,merge 会被跟踪,但是 Subversion 不会跟踪 merge 信息,所以你不妨做方法 1,在提交日志中做一个注释。

一些要查找的 URL:

于 2009-03-20T10:53:28.660 回答
4

这里有两种可能:

  • 你有效地切换到了以前版本的 repo,所以你在第 1 版上工作;
  • 或者您在版本 2 上检出旧版本的文件,更改它们并作为新版本提交。

无论如何,如果您成功提交了更改,那么这就是服务器上应该有的内容。

但是,如果您不确定,我建议:

  • 保留当前文件的备份;
  • 查看 repo 的新副本;
  • 如果您看到它与您的副本相同,则无需执行其他操作。
  • 如果没有,请用您的备份覆盖新副本中的所有文件(隐藏的 .svn 文件夹除外!)
于 2009-03-20T10:55:05.583 回答
2

所以我将一些文件切换到旧版本,以便在我的本地平台上将一些文件恢复到版本 1。

取而代之的是,您应该从特定修订中恢复更改。在那之后,您应该仍然能够更新和恢复该修订版的更改。

于 2009-03-20T11:13:46.347 回答