我正在尝试在公司内部设置SVN方法。问题是,我想为我们的程序员创建一个简单的方法来完成他们的任务。我们在任务分配中工作,并且任务仅修改我们的代码库的子集,通常从我们的存储库的各个部分获取对象(文件)。
我想要做的是,找到一种在SVN中创建分支的方法(想象它的名称作为来自错误跟踪器的任务代码),在该分支内部只有与该任务相关的文件。
像这样:有一个巨大的文件夹结构来分隔系统的各个模块和部分,但我们将举一个小例子:文件夹1,2和3,里面有一些文件。
我们想从每个文件夹中获取一个文件,并在/ branches / task_1中创建一个包含每个文件夹中的文件的分支。
我希望能够仅使用这三个文件检出该分支,并且仍然可以将更改合并回主干,而无需更改主干的其余部分。如果我们的开发人员没有太多工作,这可能吗?
编辑:代码主要是SQL和PL / SQL代码,因此没有构建可以被破坏。请关注我所要求的内容,而不是传统的软件开发范例。EDIT2:说服客户使用传统的SVN策略!赢了!
答案 0 :(得分:2)
不,这并不容易,这是正确的:这是一个可怕的策略。
SVN旨在用作文件树的一系列快照。因此,从树上采摘到树枝然后尝试将它们合并回去将会很乏味,尽管我不认为这是不可能的。另外,您必须考虑测试每项任务中发生的事情......无论如何,必须对整个应用程序进行测试。所以做你所要求的事情毫无意义。
现在,如果您的东西是模块化设计,您可以将每个模块存储在单独的树或单独的仓库中,然后将整个应用程序维护为一系列svn:externals
,但这实际上会使其更复杂。我认为你可能会更好地以标准的方式做事。
如果你不认为这是不可能的,你至少可以尝试向某个方向发送我。
那么你必须从CLI工具创建分支,因为我不知道任何客户端只支持复制一组特定文件来创建分支(除非那组文件是特定目录的内容)在存储库中)。因此,您或开发人员必须执行以下操作:
svn cp --parents SVNURL/trunk/file1.sql SVNURL/trunk/file2.sql SVNURL/branches/taskname
问题是这只是从trunk复制文件,而不是任何中间目录结构。因此,如果你在主干上只有一个平面文件布局,那么当你将所有内容合并回来时,你可能会感到困惑,因为无论谁进行合并,都必须知道合并所有内容的位置。
我能想到的唯一方法就是单独复制每个文件,如:
svn cp --parents SVNURL/trunk/file1.sql SVNURL/branches/taskname
svn cp --parents SVNURL/trunk/file2.sql SVNURL/branches/taskname
svn cp --parents SVNURL/trunk/migrations/file3.sql SVNURL/branches/taskname/migrations
我猜它归结为什么,当你合并时,你将不得不一次做一个樱桃选择合并一个文件。对我而言,这似乎是一大笔开销,并没有带来很多好处。
在您解释了您在这里处理的内容和工作流程之后,我仍然认为这是一个坏主意。如果你将TRUNK复制到BRANCH然后只处理必要的文件,那么你将会有更轻松的时间。只需查看日志就可以很容易地看到这些文件是什么。
如果您担心开发人员意外地修改了任务范围之外的事情,我很确定您可以设置权限,只允许他们提交对受任务+写入权限影响的现有文件的访问权限必要时添加新文件。