2012-04-22 55 views
6

我已经重新命名了分支在回购和不小心保持与同一工作副本(重命名之前从该分支检出)工作。当我后来尝试提交时,我注意到工作副本仍然针对旧路径。我希望将更改提交到回购中的新路径,同时保留历史记录等等。SVN:重新命名在Repo浏览器,同时保持工作副本同步

SVN是否有优雅的解决方法?

我读了关于命令切换和重新定位,但我不确定它们中的任何一个都完全适合我的问题(描述的场景不同),并且我一直有点害怕尝试使用SVN中的命令。有没有人有这些命令的经验?

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

谢谢!

回答

6

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

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

这里有两种基本的方法来实现在Subversion中的项目:

  1. 创建每个项目库:

    • https://example.com/svn/foo/trunk
    • https://example.com/svn/bar/trunk
  2. 创建一个分支每个项目在相同的回购sitory:

    • 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)这样的常规文件比较工具重新应用等待更改。如果从日志中看不出明显的变化,试图找出确切的变化是没有好处的。

对于未来......你并不需要学习由心脏彻底颠覆书,但你应该了解的基本概念,ESP。当他们在日常工作中证明是一个问题时。

+0

嗯,我只是在回购树中重新命名了一个“目录”,这可能意味着我已经重新命名了一个分支(对不起,我是这个的noob)。 – myDisplayName 2012-04-22 16:42:58

+0

关于svn重定位,它听起来是最合适的操作,但我没有更改整个存储库的URL - 只更名为分支 - 它仍然能够正常工作吗? – myDisplayName 2012-04-22 16:52:02

+0

我也不确定关于svn开关 - 请记住我已经对我想提交的工作副本进行了更改,并且我担心Update和Switch之间的关系 - 将svn切换还原我在工作副本?如果原始分支名称不再存在,它甚至可以工作吗?像往常一样保存日志历史记录吗? – myDisplayName 2012-04-22 17:15:59

0

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

switch --relocate OLDURL TO NEWURL 

这应该解决您的问题。

+0

谢谢,但我怕用这个,因为我只在我的资料库改名为一个分支,所以我不知道这适合在您使用此命令的推荐的方案... – myDisplayName 2012-04-23 16:10:25

+0

可能是你可以简单地使用一个简单的svn开关NEWURL。 – khmarbaise 2012-04-24 10:16:58