是否有干净的方式移动/到/ trunk?

时间:2010-05-02 14:41:39

标签: svn

我错误地创建了一个没有通常的trunkbranchestags目录的Subversion存储库。也就是说,项目的根目录映射到存储库的根目录。现在我想创建一个功能分支,但是没有好的地方可以放置它。我想做的是将/移至/trunk,保留其属性和历史记录。我运气不好吗?

9 个答案:

答案 0 :(得分:34)

执行此操作的干净方法是使用svnadmin使用

转储整个存储库
svnadmin dump

然后在根目录下创建一个包含trunk目录的新存储库,并使用

重新加载转储

svnadmin load --parent-dir trunk

如果你做了一个svn移动,那么如果你在移动之前更新回到修订版,那将会搞砸,因为文件将移回到之前的位置,这可能不是你想要的。

答案 1 :(得分:26)

使用therefromhere's answer,它工作正常,但想添加包括参数的命令,即在svn服务器的命令行上执行:

  1. Dump 将您现有的存储库存入文件:

    svnadmin dump /path/to/myrepo/ > /some/dir/myproject.svndump
    
  2. Create 新的存储库:

    svnadmin create /path/to/mynewrepo/
    
  3. Add trunk/文件夹和 commit ,工作副本目录中的

    mkdir trunk; svn add trunk; svn commit trunk -m "Add: trunk folder"
    
  4. 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