颠覆最佳实践和清理

时间:2011-12-14 04:16:06

标签: svn code-organization

我有一个计划相当糟糕的subversion存储库。我想开始分支。实际上我真正想要的是“命名”已知的好版本,如果需要我可以回去。这似乎是通过svn分支完成的。

问题是我从未在任何体面的组织中设置我的subversion存储库。我没有存储库/主干,存储库/分支结构。一切都在我的存储库根目录中,我执行的唯一命令是add,delete,mv和ci。现在我已达到里程碑,我想标记或分支它。

鉴于我没有组织,我现在如何在我的存储库中构建分支以执行类似的命令?

svn cp svn://server.com/svn/repository/trunk \
  svn://server.com/svn/repository/branches/your_branch \
  -m "Branching from trunk to your_branch at HEAD_REVISION"

此外,由于我的源代码位于我的svn存储库的根目录下。是否建议任何管家或良好做法?我是在客户端还是服务器端执行此操作?

初学者问题。请提供svn命令和示例。

2 个答案:

答案 0 :(得分:4)

您应该查看命名版本的标签而不是分支:

http://svnbook.red-bean.com/en/1.1/ch04s06.html

如果您的存储库仅包含与一个应用程序/项目相关的代码,那么最好创建一个trunk目录并将当前所有内容移动到该目录中。然后在根级别创建一个标签目录(用于标签)和一个分支目录(用于分支)。这一切都可以在客户端完成(如果你不介意其他版本)。

至于示例,我无法告诉您确切的命令和语法,但这是从客户端执行此操作的快速概述:

  1. Checkout repository root
  2. svn mkdir trunk,branches,tags(在根级别创建所需的目录)
  3. svn将所有现有文件和目录移动到trunk
  4. svn提交您刚才所做的更改
  5. 执行标记
  6. 如果您有像TortoiseSVN这样的SVN客户端,这应该非常简单。

答案 1 :(得分:0)

安迪说什么

鉴于所有内容都在您的存储库的根目录下,我认为最好的想法是从新的存储库开始,在根目录创建标准的trunk / branches / tags /文件夹,将项目复制到trunk /,标记它,然后继续使用新的存储库。

从那时起,使用标签(不是分支)来命名发布。分支是指当某人需要孤立地处理棘手问题或进行一些实验性工作时,或者如果有许多变化需要进行同行评审并且您不想阻止团队的其他成员。通常,人们在分支上工作一段时间,然后在某个阶段将它们与主干合并。标签反而永远不会改变。

#make a copy of the code - cleaning up all the hidden .svn directories
cd /pth/to/original/code
find .  \! \( -name . -or -name ".svn" -or -path "*/.svn/*" \) -print  | cpio -padv /pth/to/where/you/want/your/copy


#on svn server, create new repository
svnadmin create /path/to/svn/new_repo 
svn mkdir /path/to/svn/new_repo/trunk -m "add a comment"
svn mkdir /path/to/svn/new_repo/branches -m "add a comment"
svn mkdir /path/to/svn/new_repo/tags -m "add a comment"

#import the code into the new repository
svn import -m "Start again" /pth/to/where/you/want/your/copy http://svn.example.com/new_repo/trunk

#tag the initial milestone
svn cp http://svn.example.com/new_repo/trunk http://svn.example.com/new_repo/tags/my_milestone -m "Release 1.0"

您可能希望对my_milestone使用语义版本控制,例如1.0.0等等