6

我已经在 repo 中重命名了一个分支,并且不小心继续使用相同的工作副本(在重命名之前从该分支签出)。当我后来尝试提交时,我注意到工作副本仍然以旧路径为目标。我想将更改提交到 repo 中的新路径,同时保留历史记录等...

SVN 有一个优雅的方式来解决这个问题吗?

我阅读了有关 Switch 和 Relocate 命令的信息,但我不确定它们中的任何一个是否完全适合我的问题(所描述的场景不同),而且我一直对在 SVN 中尝试命令感到有点害怕......有没有人有这些命令的经验?

我想我可以解决这个问题,例如,将重命名的项目签出到另一个工作副本,然后用更改覆盖它(除了 SVN 元数据之外)。我还可以编写一些脚本来查找所有出现的旧路径并将它们粗暴地更改为新路径,但我认为必须为此使用某种 SVN 命令。

谢谢!

4

2 回答 2

7

如果存储库 URL 更改,您需要重新定位您的工作副本。switch命令用于更改工作副本指向的分支。概念本身很清楚。

但是您谈论项目,我想这就是您面临的问题:您不会在 Subversion 文档中找到对项目的任何引用,因为这不是 Subversion 概念。

在 Subversion 中实现项目有两种基本方法:

  1. 为每个项目创建一个存储库:

    • https://example.com/svn/foo/trunk
    • https://example.com/svn/bar/trunk
  2. 在同一存储库中为每个项目创建一个分支:

    • https://example.com/svn/projects/foo/trunk
    • https://example.com/svn/projects/bar/trunk

因此,当您说“重命名项目”时,您的意思是“重命名存储库”(#1)或“重命名分支”(#2),解决方案是:

  1. svn relocate再次将您的工作副本与存储库链接
  2. 将更改svn update带到您的工作副本(如果更改在工作副本目录树内)或svn switch更改您的工作副本指向的分支(如果您有效地删除了当前分支)。

更新:到目前为止,我的建议是你从头开始。重命名您当前的工作副本,签出一个新副本,然后使用 WinMerge 或 Kdiff3(或 TortoiseMerge)等常规文件比较工具重新应用待定更改。如果日志中不明显,那么尝试找出您所做的确切更改没有任何好处。

未来……你不需要背诵完整的 Subversion 书籍,但你应该了解基本概念,尤其是。当它们被证明是您日常工作中的一个问题时。

于 2012-04-22T12:10:37.477 回答
0

您是否尝试过使用 svn 开关..

switch --relocate OLDURL TO NEWURL

这应该可以解决您的问题。

于 2012-04-22T11:53:57.120 回答