重命名SVN存储库项目名称

重命名SVN存储库项目名称,svn,naming,Svn,Naming,我已经将一个项目从CVS迁移到SVN。现在我需要重新命名这个项目。什么是重命名它的最佳方式,保持所有历史的完整性。项目文件夹包含大约100个C及其头文件。原始答案(已被接受)在问题提出时与原始问题(已被编辑)相关 事情已经发生了变化,正如其他人在本文中指出的那样,现在有更好的方法来重命名存储库和/或存储库中的项目 我将把这个答案转换成一个社区wiki,并让其他人继续维护它,以确保它保持相关性。为了重命名存储库,您只需重命名它的根目录并生成一个新的UUID。假设存储库位于/var/svnroot/

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

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

事情已经发生了变化,正如其他人在本文中指出的那样,现在有更好的方法来重命名存储库和/或存储库中的项目


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

为了重命名存储库,您只需重命名它的根目录并生成一个新的UUID。假设存储库位于
/var/svnroot/my_repo
中,则必须以root用户身份运行以下命令才能重命名存储库:

$ mv /var/svnroot/my_repo /var/svnroot/my_new_repo
$ svnadmin setuuid /var/svnroot/my_new_repo
之后,您可以通过您喜爱的协议访问它。

\5。存储库管理\:

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

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

:

有时管理员可能会更改存储库的“基本位置”——换句话说,存储库的内容不会更改,但用于到达存储库根目录的主URL会更改。例如,主机名、URL方案或指向存储库本身的URL的任何部分可能会发生更改。您可以使用svn开关命令“重写”工作副本中所有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重新定位-重新定位工作副本以指向不同的存储库根URL

简介

svn从-PREFIX重新定位到-PREFIX[路径…]

svn重新定位到-URL[PATH]

说明

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

$ svn relocate file:///var/svn/new-repos/trunk
$
第一个svn重定位语法允许您更新一个或多个工作副本,实际上相当于在这些工作副本中记录的存储库根URL中查找和替换。Subversion将用这些URL中的字符串TO-PREFIX替换初始子字符串FROM-PREFIX。这些初始URL子字符串可以是区分它们所需的长度或长度。显然,要使用这种语法形式,您需要知道工作副本所指向的存储库的当前根URL以及该存储库的新URL。(您可以使用svn信息确定前者。)

第二种语法不要求您知道工作副本与之关联的当前存储库根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
选项禁用此行为

  • 首先了解
    \Repositories
    文件夹位于何处,(defaut
    C:\Repositories

  • 然后在
    /Repositories
    文件夹中重命名您想要的存储库。(窗口)

  • 如果您正在使用eclipse,则放弃SVN存储库中的旧存储库位置,转到
    New->repository location…->您的新存储库名称
    。就这样

  • @明基:你的博客是一本书吗