0

我正在尝试在我的公司内设置 SVN 方法。问题是,我想为我们的程序员创建一个简单的方法来完成他们的任务。我们在任务分配中工作,一个任务只修改我们代码库的一个子集,通常从我们存储库的各个部分获取对象(文件)。

我想做的是,找到一种在 SVN 中创建分支的方法(将其名称想象为来自错误跟踪器的任务代码),并且在该分支内只有与该任务相关的文件。

像这样:有一个巨大的文件夹结构来分隔系统的各个模块和部分,但我们将举一个小例子:文件夹 1、2 和 3,其中包含一些文件。
我们想从每个文件夹中获取一个文件,并在 /branches/task_1 中创建一个包含每个文件夹中的文件的分支。

我希望能够仅用三个文件签出该分支,并且仍然可以将更改合并回主干,而无需更改主干的其余部分。如果我们的开发人员没有太多工作,这是否可能?

编辑:代码主要是 SQL 和 PL/SQL 代码,所以没有要破坏的构建。请专注于我的要求,而不是传统的软件开发范式。

EDIT2:说服客户使用传统的 SVN 策略!赢!

4

1 回答 1

2

不,这并不容易,这是正确的:这是一个可怕的策略。

SVN 旨在用作文件树的一系列快照。所以从树上摘樱桃到树枝上,然后尝试将它们合并回去会很乏味,尽管我认为这不是不可能的。另外,您必须查看测试每个任务中发生的情况......无论如何,这必须针对整个应用程序进行测试。所以按照你的要求去做是没有意义的。

现在,如果您的东西在设计上是模块化的,您可以将每个模块存储在单独的树或单独的 repo 中,然后将完整的应用程序维护为一系列 . svn:externals,但这实际上会使它变得更加复杂。我认为你可能会更好地以标准方式做事。

如果你不认为这是不可能的,你至少可以试着把我送到某个方向。

好吧,您将不得不从 CLI 工具创建分支,因为我不知道有任何客户端仅支持复制一组特定文件来创建分支(除非该组文件是存储库中特定目录的内容)。因此,您或开发人员必须执行以下操作:

svn cp --parents SVNURL/trunk/file1.sql SVNURL/trunk/file2.sql SVNURL/branches/taskname

问题是这只会从主干复制文件,而不是任何中间目录结构。因此,如果您在主干上只有平面文件布局,那么当您将所有内容合并回来时,您可能会感到困惑,因为进行合并的人只需要知道在哪里合并所有内容。

我能想到的唯一方法是单独复制每个文件,例如:

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,然后只处理必要的文件,您将有一个更轻松的时间。只需查看日志就可以很容易地了解这些文件是什么。

如果您担心您的开发人员不小心修改了任务范围之外的内容,我很确定您可以将权限设置为仅授予他们对受任务影响的现有文件的提交访问权限+添加新文件的写入权限如有必要。

于 2013-03-05T19:59:56.107 回答