我已将项目从CVS迁移到SVN。现在我需要重命名该项目。什么是最好的重命名方式,保持历史的完整性。项目文件夹包含大约100个C及其头文件。
答案 0 :(得分:44)
要重命名存储库,您只需重命名其根目录并生成新的UUID。假设存储库位于/var/svnroot/my_repo
中,您必须运行此命令(以root身份)来重命名存储库:
$ mv /var/svnroot/my_repo /var/svnroot/my_new_repo
$ svnadmin setuuid /var/svnroot/my_new_repo
之后,您可以通过自己喜欢的协议访问它。
答案 1 :(得分:21)
Subversion中没有内置机制来重命名存储库。
维护完整性和历史记录的最佳选择是执行旧存储库的存储库转储,然后将转储重新导入新存储库。
我在这里写了一篇关于此的帖子:How To Rename an SVN repository。
您只需要使用 svnadmin 实用程序,然后 svnadmin创建新存储库, svnadmin dump 以前存储库的内容最后 svnadmin导入转储到您使用 svnadmin create 创建的新存储库。
修改强>
如果您需要重命名存储库中的“项目” - 并且通过项目我假设您指的是一个目录 - 那么您只需要使用svn move command。请注意,这是使用svn客户端而不是svnadmin完成的。 svn move 命令的语法为svn move SRC DEST
,它允许您基本上对存储库内的文件或目录进行重命名。应该为该文件(或目录)保留所有历史记录。
答案 2 :(得分:18)
SVN Book \ 5.资源库管理\ Moving and Removing Repositories:
Subversion存储库数据完全包含在存储库中 目录。因此,您可以将Subversion存储库移动到其他存储库 磁盘上的位置,重命名存储库,复制存储库或删除 存储库完全使用您的操作提供的工具 操纵目录的系统
重命名通常在同一台服务器上完成,因此存储库目录的简单重命名/移动就可以完成。 svnadmin setuuid
的调用不需要 ,因为您没有复制并且UUID应该保持不变,因此您的客户端可以轻松地重新定位到新的存储库URL。
答案 3 :(得分:2)
有时管理员可能会更改存储库的“基本位置” - 换句话说,存储库的内容不会更改,但用于到达存储库根目录的主URL会更改。例如,主机名可能会更改,URL方案或URL的任何部分通向存储库本身。您可以使用svn switch命令“重写”工作副本中所有URL的开头,而不是签出新的工作副本。使用--relocate选项进行替换。没有更改文件内容,也没有联系存储库。它类似于在工作副本上运行Perl脚本.svn /目录运行s / OldRoot / NewRoot /.
$ 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 relocate - 重新定位工作副本以指向不同的存储库根URL。
<强>概要强>
svn relocate FROM-PREFIX TO-PREFIX [PATH...]
svn relocate TO-URL [PATH]
<强>描述强>
有时管理员可能会更改存储库的位置(或客户端的明显位置)。存储库的内容不会更改,但存储库的根URL会更改。主机名可能会更改,因为存储库现在是从另一台计算机提供的。或者,URL方案可能会更改,因为现在通过SSL(使用https://)而不是通过纯HTTP来提供存储库。这些类型的存储库重定位有许多不同的原因。但理想情况下,存储库的“地址更改”不应突然导致指向该存储库的所有工作副本永远无法使用。幸运的是,事实并非如此。 Subversion不是强制用户在重新定位存储库时签出新的工作副本,而是提供svn relocate命令,该命令“重写”工作副本的管理元数据以引用新的存储库位置。
第一个svn重定位语法允许您更新一个或多个工作副本,这些副本实际上相当于在这些工作副本中记录的存储库根URL中的查找和替换。 Subversion将使用这些URL中的字符串TO-PREFIX替换初始子字符串FROM-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
选项禁用此行为。
答案 4 :(得分:0)
首先要了解\Repositories
文件夹所在的位置,(defaut C:\Repositories
)
之后,在/Repositories
文件夹中重命名您想要的存储库。 (视窗)
如果您正在使用eclipse,则丢弃SVN存储库中的旧存储库位置并转到New->Repository Location...-> your new repository name
。多数民众赞成。