我正在开发一个没有trunk / branches / tags目录结构的项目 - 即。一切都在svn repo的根目录中。
我想在根目录中创建一个trunk目录,并将根目录中的所有内容移动到新的trunk目录中。
这样做的最佳方式是什么?
我考虑的第一件事是
svn mkdir trunk
(for each file or directory that is not called trunk: )
svn mv FILEorDIR trunk/
但这会有效删除每个文件,然后再次添加。还有更好的方法吗?
感谢。
答案 0 :(得分:16)
我有完全相同的问题,并在查看了几个不同的页面(包括这个页面)后解决了它。这是我的解决方案:
注意:在开始之前,如果您打算使用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文件夹中。甜!
但我的repo是60GB并且在远程服务器上。我宁愿不再检查一下。 svn switch
会让您将现有的工作副本指向新的trunk
目录,以便继续使用您拥有的副本。进入工作副本的根文件夹并运行svn switch REPO_URL/trunk --ignore-ancestry
。在将所有文件从根目录移动到trunk目录后,应该说At revision X
其中X
是修订版。而已!也许做一个SVN更新以获得良好的衡量标准:)
答案 1 :(得分:10)
这与我过去的做法类似。您的解决方案实际上复制每个文件,然后删除原始文件。由于Subversion实现副本的方式,每个文件的历史记录都会被保留。
执行此操作后,您可以使用svn switch
在新位置指定现有结帐。
答案 2 :(得分:3)
如果您正在使用eclipse IDE和Subclipse for SVN,那么您可以继续在SVN中创建文件夹并将所有文件/目录从root移动到trunk目录,然后将ProjectName / trunk签出到eclipse工作区...
答案 3 :(得分:1)
这里给出了使用svn + ssh方法在unix终端的svn根目录中创建trunk文件夹的方法。 “projectname”是在svn:
中创建项目时的根“标识符”svn mkdir svn+ssh://username@host/projectname/trunk -m "Create the trunk folder"
答案 4 :(得分:1)
旧帖子,但我也有同样的问题,所有我的回购都在根,而不是在中继。这在尝试简单的git svn clone
命令时出现了问题。经过数小时的反复试验,这很简单:
git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.
答案 5 :(得分:0)
您可能需要查看svnadmin工具。
说实话,我之前没有尝试过,你可能会得到一个人的答案,但是你可以从这样的事情开始:
您应该能够初始化一个新的存储库,在其中创建一个“trunk”目录,然后将您之前的存储库转储到“trunk”中。
答案 6 :(得分:0)
我自己做了好几次并学到了这一点:如果您想保留以前 SVN 根目录的历史记录 + 保留所有 SVN 属性(如 ignore),您必须按照以下方式进行。 注意:我用 TortoiseSVN 完成了这一切,因为这种方式非常简单。但是您也可能会成功使用命令行。您还可以在下面找到使用 CLI 执行此操作的说明。
不要忘记为每个操作添加适当的 SVN 消息,以便您以后清楚地了解已经完成的操作。
示例存储库:/svn/my_project
TortoiseSVN 的步骤:
/svn/my_project
到主干 /svn/trunk
/svn/my_project
/svn/trunk
到 /svn/my_project
CLI 的步骤(未经测试!):
/svn/trunk/
/svn/my_project/
/svn/trunk/
目录到新目录/svn/my_project/trunk
/svn/trunk/
目录