有一个干净的方式来移动/ /树干?

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

干净的方法是使用svnadmin来转储出整个存储库

 svnadmin dump 

然后创build一个新的存储库,在根目录下有trunk目录,然后重新加载转储

svnadmin load --parent-dir trunk

如果您执行svn移动,那么如果您在移动之前更新回修订版本,那么这将会使事情变得糟糕,因为这些文件将移回到之前的位置,这可能不是您想要的。

使用它的答案 ,这工作得很好,但想添加包括参数,即在svn服务器的命令行上执行的命令:

  1. 将现有的存储库转储到一个文件中:

     svnadmin dump /path/to/myrepo/ > /some/dir/myproject.svndump 
  2. 创build一个新的存储库:

     svnadmin create /path/to/mynewrepo/ 
  3. 添加 trunk/文件夹并将其提交 到工作副本目录中

     mkdir trunk; svn add trunk; svn commit trunk -m "Add: trunk folder" 
  4. 使用trunk作为parent-dir将转储文件加载到新的存储库中:

     svnadmin load --parent-dir trunk /path/to/mynewrepo/ < /some/dir/myproject.svndump 

您需要创build/trunk然后执行/trunk中所有内容的svn移动,然后进行提交。

之后,你会把你的工作副本switch/trunk

最简单的方法是创build一个“主干”目录,然后将其他所有内容移动到其中。 你将不得不手动复制任何属性,但它不应该是一个大问题。 历史是每个文件,所以它应该保持。

另一个需要考虑的问题是是否有其他人打开存储库。 这将是很难合并,所以确保每个人都有他们的变化检查之前,你这样做。

你不能只是创build树干目录,并将一切从/到干线?

正如其他答案指出的,只是做一个SVN到主干目录将做到这一点。 要更新您的工作副本,请查看svn switch命令。

不,只是创build一个trunk文件夹,并将根的所有内容移动到它。 你可以从资源pipe理器或通过回购浏览器来完成,历史将会持续。

一些讨论的方法有一些缺陷或限制。 下面的post讨论了另一种方法,包括转储回购和编辑文件path。 这有好处,移动的文件也将被正确修改。

http://dotslashstar.blogspot.com/2011/06/svn-hack-insert-missing-trunk-root.html

我是如何做到这一点的快速例子。

我想将file:///svn/myRepofile:///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