我有一个旧但非常重要的 Subversion 存储库,我没有从通常的结构开始创建它:主干、分支、标签。所以我在这个存储库中的所有文件都驻留在根目录中。
我知道如何创建新文件夹并将我的所有文件移动到主干中,但如果我这样做,我将失去我的项目历史 3 年,因为“主干”是一个新文件夹。那么有没有一种解决方案可以将我的整个项目的历史从根目录移动到主干文件夹?
谢谢!
我有一个旧但非常重要的 Subversion 存储库,我没有从通常的结构开始创建它:主干、分支、标签。所以我在这个存储库中的所有文件都驻留在根目录中。
我知道如何创建新文件夹并将我的所有文件移动到主干中,但如果我这样做,我将失去我的项目历史 3 年,因为“主干”是一个新文件夹。那么有没有一种解决方案可以将我的整个项目的历史从根目录移动到主干文件夹?
谢谢!
是的。您可以使用 svnadmin dump 将存储库与历史记录一起转储到文件中。然后,您可以使用 svnadmin load 将转储文件加载到主干文件夹中。完成后,从根目录中删除文件。
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
svnadmin load REPOS_PATH
转储文档:http ://svnbook.red-bean.com/en/1.1/re31.html 加载文档:http ://svnbook.red-bean.com/en/1.0/re36.html
您可以使用
svn copy http://my.server/svn/repos/ http://my.server/svn/repos/trunk/ \
-m "Copied"
创建从存储库根目录 (^/) 到 trunk/ (^/trunk) 的副本,保留所有历史记录,包括根目录的历史记录。
之后,您可以在下一次提交中删除旧位置中的文件和子目录。
如果您使用 svn mv 文件,您不会丢失历史记录。历史将被保留。因此,您可以使用 svnadmin load -parent-dir 主干重做您的存储库,但您需要重新检查所有内容,因为您应该在新存储库中有一个新的 UUID。
svn co http://example.com/repos/
cd repos
svn mkdir trunk tags branches
svn mv a trunk/a
svn mv b trunk/b
svn ci -m 'Moving project into trunk'
诚然,这不是一个理想的解决方案,但为什么不创建一个全新的存储库,其内容是旧存储库中的所有代码,但很好地格式化为主干等。保持旧存储库完全独立,但使其只读。
不得不记住,在日期 X 之前,如果您需要了解项目的历史记录,您需要查看旧存储库而不是新存储库,这无疑是一件痛苦的事情。