【问题标题】:Renaming SVN repository project name重命名 SVN 存储库项目名称
【发布时间】:2011-05-02 04:01:47
【问题描述】:

我已将一个项目从 CVS 迁移到 SVN。现在我需要重命名该项目。什么是重命名它的最佳方法,保持所有历史不变。项目文件夹包含大约 100 个 C 及其头文件。

【问题讨论】:

  • 如果您使用VisualSVN Server,您只需在VisualSVN 服务器管理器MMC 中右键单击一个存储库并选择“重命名”

标签: svn naming


【解决方案1】:

原始答案(已被接受)在提出问题时与原始问题(此后也已被编辑)相关。

情况发生了变化,正如其他人在此线程中指出的那样,现在有更好的方法来重命名存储库和/或存储库中的项目。

我将把这个答案转换为社区 wiki,并让其他人继续维护它以确保它保持相关性。

【讨论】:

  • @Minky:你的博客是 4 月 1 日的玩笑吗?要重命名存储库,只需重命名您的存储库所依赖的目录:例如,如果您的存储库位于 /opt/svn/my_old_name 中,只需应用: mv /opt/svn/my_old_name /opt/svn/new_name 无需转储/重新加载!
  • 不要忘记使用cp -r old_repo_directory/conf new_repo_directory复制您的身份验证设置
  • 感谢 peter parker 和 toddmo ,无需转储或其他复杂的事情,您所说的: mv /opt/svn/my_old_name /opt/svn/new_name 有效,只需要更新权限 /config ,也适用于复制存储库
  • @PeterParker - 请发表您的评论作为答案 - 它应该被接受。另一种方式可以监督 cmets。感谢您提供的信息!
  • 这个答案如何获得最多的支持?这是完全错误的。
【解决方案2】:

要重命名存储库,您只需重命名其根目录并生成新的 UUID。假设存储库位于 /var/svnroot/my_repo 中,您必须运行此命令(以 root 身份)重命名存储库:

$ mv /var/svnroot/my_repo /var/svnroot/my_new_repo
$ svnadmin setuuid /var/svnroot/my_new_repo

之后,您可以通过自己喜欢的协议访问它。

【讨论】:

  • 只要移动(而不是复制)原始存储库,就不需要生成新的 UUID。
  • 这有什么证据吗?我不想冒险这样做并损坏我的回购。
  • @guerda 我在这个移动的仓库中工作了一年,没有任何问题,但现在我不在同一家公司工作。您知道,在对数据进行任何重要更改之前进行备份;)
  • @guerda 不需要“证明”,Brian 的回答是官方svnbook.red-bean.com/en/1.7/…
  • 肯定需要证明,而那个链接就是证明。将证据放在评论中,同时说不需要证据,IMO 有点愚蠢。
【解决方案3】:

SVN Book\5. 仓库管理\Moving and Removing Repositories:

Subversion 存储库数据完全包含在存储库中 目录。因此,您可以将 Subversion 存储库移动到其他存储库 磁盘上的位置、重命名存储库、复制存储库或删除 完全使用您的操作提供的工具存储库 目录操作系统

重命名通常在同一台服务器上完成,因此只需简单地重命名/移动存储库目录即可。 不需要调用svnadmin setuuid,因为您没有制作副本并且 UUID 应该保持不变,因此您的客户端可以轻松地重新定位到新的存储库 URL。

【讨论】:

    【解决方案4】:

    SVN 1.1 (old book):

    有时管理员可能会更改存储库的“基本位置”——换句话说,存储库的内容不会更改,但用于访问存储库根目录的主 URL 会更改。例如,主机名、URL 方案或指向存储库本身的 URL 的任何部分可能会更改。您可以使用 svn switch 命令“重写”工作副本中所有 URL 的开头,而不是签出新的工作副本。使用 --relocate 选项进行替换。不更改文件内容,也不联系存储库。这类似于在运行 s/OldRoot/NewRoot/ 的工作副本 .svn/ 目录上运行 Perl 脚本。

    $ svn checkout file:///tmp/repos test
    A  test/a
    A  test/b
    …
    
    $ mv repos newlocation
    $ cd test/
    
    $ svn update
    svn: Unable to open an ra_local session to URL
    svn: Unable to open repository 'file:///tmp/repos'
    
    $ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
    $ svn update
    At revision 3.
    

    SVN 1.7 (current book):

    svn relocate — 重新定位工作副本以指向不同的存储库根 URL。

    概要

    svn relocate FROM-PREFIX TO-PREFIX [PATH...]

    svn relocate TO-URL [PATH]

    说明

    有时管理员可能会更改存储库的位置(或从客户的角度来看的明显位置)。存储库的内容不会更改,但存储库的根 URL 会更改。主机名可能会更改,因为现在正在从另一台计算机提供存储库。或者,URL 方案可能会发生变化,因为现在通过 SSL(使用 https://)而不是通过普通 HTTP 提供存储库。这些类型的存储库重定位有许多不同的原因。但理想情况下,存储库的“地址更改”不应突然导致指向该存储库的所有工作副本永远无法使用。幸运的是,事实并非如此。 Subversion 提供了 svn relocate 命令,该命令“重写”工作副本的管理元数据以引用新的存储库位置,而不是强制用户在重新定位存储库时签出新的工作副本。

    第一个 svn relocate 语法允许您更新一个或多个工作副本,基本上相当于在这些工作副本中记录的存储库根 URL 内进行查找和替换。 Subversion 将在这些 URL 中将初始子字符串 FROM-PREFIX 替换为字符串 TO-PREFIX。这些初始 URL 子字符串可以长或短,以区分它们。显然,要使用这种语法形式,您需要知道工作副本指向的存储库的当前根 URL 以及该存储库的新 URL。 (可以使用 svn info 来判断前者。)

    第二种语法根本不需要您知道与工作副本关联的当前存储库根 URL — 只需知道它应该指向的新存储库 URL (TO-URL)。在这种语法形式中,一次只能重定位一个工作副本。

    示例

    让我们从反映本地存储库 URL 的工作副本开始:

    $ svn info | grep URL:
    URL: file:///var/svn/repos/trunk
    $
    

    有一天管理员决定重命名磁盘存储库目录。我们错过了备忘录,所以下次我们尝试更新工作副本时会看到一个错误。

    $ svn up
    Updating '.':
    svn: E180001: Unable to connect to a repository at URL 'file:///var/svn/repos/trunk'
    

    在自动售货机将管理员逼入绝境后,我们了解到存储库正在移动,并被告知新的 URL。不过,我们不需要签出新的工作副本,而是要求 Subversion 重写工作副本元数据以指向新的存储库位置。

    $ svn relocate file:///var/svn/new-repos/trunk
    $
    

    Subversion 并没有告诉我们太多关于它做了什么,但是嘿——我们真正需要的是无错误操作,对吧?我们的工作副本可再次用于在线操作。

    $ svn up
    Updating '.':
    A    lib/new.c
    M    src/code.h
    M    src/headers.h
    …
    

    默认情况下,svn relocate 将遍历嵌套在您的工作副本中的任何外部工作副本,并尝试重新定位这些工作副本。使用--ignore-externals 选项禁用此行为。

    【讨论】:

    • 很好的细节、解释和历史。非常有用的信息。即使它没有直接解决 OP。
    【解决方案5】:
    1. 首先了解\Repositories文件夹所在的位置,(默认C:\Repositories

    2. 之后,在 /Repositories 文件夹中重命名您想要的存储库。 (窗口)

    3. 如果您使用的是 Eclipse,则丢弃 SVN 存储库中的旧存储库位置并转到 New->Repository Location...-> your new repository name。就是这样。

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 2013-03-04
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2019-04-23
      • 2011-07-15
      相关资源
      最近更新 更多