2008-12-06 55 views
41

我正在开发一个没有trunk/branches/tags目录结构的项目 - 即。一切都在svn回购的根源中。SVN在现有存储库上创建主干目录

我想创建一个中继目录,并在根目录中,并将根目录中的所有内容移动到新的中继目录中。

这样做的最好方法是什么?

我考虑的第一件事是

svn mkdir trunk 
(for each file or directory that is not called trunk:) 
svn mv FILEorDIR trunk/ 

但是,这有效地删除所有文件,然后再添加它。有没有更好的办法?

谢谢。

回答

9

这与我过去所做的相似。你的解决方案实际上是拷贝每个文件,然后删除原来的。由于Subversion实现副本的方式,每个文件的历史记录都被保留下来。

完成此操作后,您可以使用svn switch将现有结帐指向新位置。

+0

你可以给SVN开关确切的命令?另外,是否有办法强制切换到不运行的工作副本中的最新版本? – 2010-07-02 13:44:49

+0

@Vijay开发:我建议全部细节。[`svn的文件之开关(http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.switch.html)。 – 2010-07-02 21:44:49

3

如果您使用eclipse IDE和Subclipse进行SVN,那么您可以继续在SVN中创建文件夹,并将所有文件/目录从根目录移动到trunk目录,然后将ProjectName/trunk签出到eclipse工作区。

+1

此外,如果您打算复制到干净的存储库(没有任何项目签入,因此它没有中继/分支/标签结构),在Eclipse中,您可以创建trunk/branches/tags结构与回购>新建>项目结构...>单片。 之后,只需复制/粘贴源回购的所有元素。 – Saran 2012-04-06 11:28:32

1

这里给出使用svn + ssh方法在unix终端的svn根目录下创建trunk文件夹的方法。 “项目名称”为根“标识符”当您创建的svn项目:

svn mkdir svn+ssh://[email protected]/projectname/trunk -m "Create the trunk folder" 
13

我有完全相同的问题,并通过几个不同的页面之后寻找解决它(这个包含)。这里是我的解决方案:

注:开始之前,如果你打算使用svn switch,让您的工作拷贝,并避免再次检查了回购,这是最好的,以确保你的工作副本是最新的,并没有未提交的变更。

在与解决方案...

//REPO_URL = The URL for the repo on the SVN server. 
//In my case it was https://IP_ADDRESS:PORT/svn/my_repo 

//Make the trunk dir in the root of your SVN repo 
svn mkdir REPO_URL/trunk -m "making trunk dir" 

//Move everything from your root dir to your new trunk dir 
svn move REPO_URL/A_FOLDER REPO_URL/trunk/A_FOLDER -m "moving folders to trunk" 
svn move REPO_URL/ANOTHER_FOLDER REPO_URL/trunk/ANOTHER_FOLDER -m "blah" 
svn move REPO_URL/A_FILE.TXT REPO_URL/trunk/A_FILE.TXT -m "moving files to trunk" 
//Keep going until you've moved everything from your root dir to the trunk dir... 

所以,现在,你的SVN服务器上,一切都在trunk文件夹。甜!

但我的回购是60GB和远程服务器上。我宁愿不再检查一遍。 svn switch将允许您将现有的工作副本指向新的trunk目录,以便您可以继续使用您拥有的副本。进入您的工作副本的根文件夹并运行svn switch REPO_URL/trunk --ignore-ancestry。应该说At revision X其中X是您将所有文件从根目录移动到trunk目录后的修订版本。而已!也许做的好措施:)

0

旧后一个SVN更新,但我也有同样的问题,我的所有回购是在根,而不是在树干。这在试图使用简单的git svn clone命令时出现问题。经过试验和错误的时间,这是一个简单的:

git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.