大约9个月前,我开始使用SVN,至少可以说它已经改变了游戏规则。虽然,我仍然感到迷茫。我觉得我还需要利用很多东西来真正加强我的应用程序开发。
例如
我希望能够将任何易失性/重大更改隔离到某种“子存储库”或某些内容中。我发现重大更改妨碍了非常紧急的次要错误修复。如何推送一个简单的更新而不推送不完整或损坏的代码?
大约9个月前,我开始使用SVN,至少可以说它已经改变了游戏规则。虽然,我仍然感到迷茫。我觉得我还需要利用很多东西来真正加强我的应用程序开发。
例如
我希望能够将任何易失性/重大更改隔离到某种“子存储库”或某些内容中。我发现重大更改妨碍了非常紧急的次要错误修复。如何推送一个简单的更新而不推送不完整或损坏的代码?
Answers:
为了解决您的示例,您可以采用三种方法:
svn commit file1 path1/file2 path2
要提交的文件1,路径1 /文件2和路径2下的所有更改。svn copy svn://hostname/projectname/trunk svn://hostname/branches/branch-for-feature-X
。现在,您可以将工作副本切换到新位置:svn switch svn switch svn://hostname/projectname/branches/branch-for-feature-X
。如果切换到错误修复模式,则提交您的实际更改,将工作副本切换回主干,修复错误并提交,然后将工作副本切换回功能分支。如果您准备好开发该功能,则可以将其合并回主干。对于上述简单情况,您通常会使用#1(我经常使用),有时会使用#2。使用分支(案例3)更复杂(请参阅更多信息),但可以使用更多技巧。但是分支匹配您对子存储库的描述。
除了你的例子,我不能说太多。有关Subversion的很多事情,但我不知道您已经使用了什么以及项目需要什么。要了解有关SVN的更多信息,SVN-Book是一个不错的资源:http : //svnbook.red-bean.com/
您是否看过Subversion分支?
一种常见的技术是保持Trunk稳定,并根据需要应用关键修复程序。然后,您为每个重要的新工作创建一个分支。从事该项目的开发人员签出分支并提交到该分支。在您决定将分支合并回主干作为最终集成的一部分之前,它不会影响干线。
另一种方法是为特定的发行版创建分支,以避免在主干上意外进行的任何其他工作导致问题。您可以根据需要对“发布分支”进行错误修复,然后在准备好后将这些修复折叠回主干。
您的开发人员可以签出多个工作副本(主干和任何分支),或者可以使用svn switch
命令在主干和特定分支之间进行交换。
我不建议您单独保存许多“沙盒”工作副本,因为(a)禁止与他人合作,并且(b)意外地将尚未生效的更改提交到主干中太容易了。
我的工作副本的当前大小为10GB,包含超过50.000个文件。我可以为不同的分支提供多个副本,但是创建新副本需要一些时间!
当出现紧急错误时,我通常将所有更改保存在补丁程序中,还原所有内容,对错误进行处理并提交,然后应用我保存的补丁程序……比获得新的工作副本要容易和快捷得多。如果我需要经常这样做,我将有两个工作副本:一个用于长期更改,另一个用于错误修复。