我错误地创建了一个没有通常的trunk
,branches
和tags
目录的Subversion存储库。也就是说,项目的根目录映射到存储库的根目录。现在我想创建一个功能分支,但是没有好的地方可以放置它。我想做的是将/
移至/trunk
,保留其属性和历史记录。我运气不好吗?
答案 0 :(得分:34)
执行此操作的干净方法是使用svnadmin
使用
svnadmin dump
然后在根目录下创建一个包含trunk目录的新存储库,并使用
重新加载转储 svnadmin load --parent-dir trunk
如果你做了一个svn移动,那么如果你在移动之前更新回到修订版,那将会搞砸,因为文件将移回到之前的位置,这可能不是你想要的。
答案 1 :(得分:26)
使用therefromhere's answer,它工作正常,但想添加包括参数的命令,即在svn服务器的命令行上执行:
Dump 将您现有的存储库存入文件:
svnadmin dump /path/to/myrepo/ > /some/dir/myproject.svndump
Create 新的存储库:
svnadmin create /path/to/mynewrepo/
Add trunk/
文件夹和 commit ,工作副本目录中的 :
mkdir trunk; svn add trunk; svn commit trunk -m "Add: trunk folder"
Load 将转储文件使用trunk
作为parent-dir
进入新存储库:
svnadmin load --parent-dir trunk /path/to/mynewrepo/ < /some/dir/myproject.svndump
答案 2 :(得分:2)
你需要创建/trunk
并在trunk中对root的所有内容进行svn移动然后提交。
之后,您switch
将/trunk
工作副本发送至{{1}}。
答案 3 :(得分:2)
最简单的方法是创建一个'trunk'目录,然后将其他所有目录移入其中。您必须手动复制任何属性,但这不应该是一个大问题。历史记录是每个文件,所以它应该保留。
要考虑的另一个问题是是否有其他人打开了存储库。合并起来很困难,因此请确保在执行此操作之前检查每个人的更改。
答案 4 :(得分:1)
你不能只创建主干目录并将所有内容从/移到主干吗?
答案 5 :(得分:1)
正如其他答案所指出的那样,只需将svn mv放入trunk目录即可。要更新您的工作副本,请查看svn switch命令。
答案 6 :(得分:1)
不只是创建一个trunk
文件夹并将根目录的所有内容移动到该文件夹。您可以从资源管理器或通过repo-browser执行此操作,历史记录将持续存在。
答案 7 :(得分:1)
一些讨论过的方法存在一些问题或局限性。下面的帖子讨论了另一种方法,包括转储repo和编辑文件路径。这样做的好处是移动的文件也将被正确修改。
http://dotslashstar.blogspot.com/2011/06/svn-hack-insert-missing-trunk-root.html
答案 8 :(得分:-2)
我是如何做到的快速示例。
我想将file:///svn/myRepo
移至file:///svn/myRepo/trunk
cd /
svnadmin dump /svn/myRepo > my.dump
killall svnserve
sudo rm -r -f /svn/myRepo
svnadmin create /svn/myRepo
svnserve -d -r /svn
svn mkdir file:///svn/myRepo/trunk -m "Created trunk dir"
svnadmin load /svn/myRepo --parent-dir trunk < my.dump