What to do with multiple projects depending on the same source?
这是我在过去一个月中两次遇到的事情,我甚至不确定如何将其表达为Google查询。
我实际上正在使用SVN进行所有操作,但是看来这应该是一个普遍的版本控制问题。
我们有两个项目,其中一个项目依赖于另一个项目的某些代码。由于API问题,在产品之间建立某种形式的链接并不实际(我不想配置所有非编码器的机器来实现此目的)。
我想,如果将共享代码的副本放入目录结构中,最终将覆盖SVN使用的所有配置文件。这意味着从属项目目录中的版本将不再能够更新。
例如:
项目#1需要使用类MyExampleClass,但是,MyExampleClass是定义为项目#2的一部分并由项目#2所需要的东西。
几年来,我们已经在实践中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | root +---common | +---lib1 | | \\---trunk | | +---include | | \\---src | \\---lib2 | \\---trunk | +---include | \\---src +---proj1 | \\---trunk | +---include | | \\---common | \\---src | \\---common \\---proj2 \\---trunk +---include | \\---common \\---src \\---common |
项目中
1 2 3 4 | c:\\dev> svn pget -v svn:externals proj1\\trunk\\src\\common Properties on 'c:\\dev\\proj1\\trunk\\src\\common': svn:externals : lib1 http://.../common/lib1/trunk/src lib2 http://.../common/lib2/trunk/src |
我们遇到的问题是多方面的,但与项目不断变化时标记和分支源代码有关。如果您想拥有可复制的版本,我在上面显示的外部定义存在一些非常严重的问题:
使用
如果必须维护公共代码的多个不兼容分支,则必须指定要显式地与(可能是)修订一起的哪个分支。
不用说,这可能有点令人头疼。幸运的是,有人在Subversion领域写了
如果您确实选择了这条路线,那么请务必考虑如何随着项目的发展和变化而保持联系。我们发现,花一点时间思考一个流程将在这里大有帮助。
查看
外部人员,但请注意以下问题:
将外部更新更新到某个日期
将所有共享文件放在一个项目或另一个项目中的单独文件夹中。然后使用外部引用该文件夹。
将来自同一文件夹中不同位置的文件混合在一起是一个坏主意。
svn:externals将允许您在目录级别引入文件。像:
1 2 3 4 5 6 7 | Proj1\\ File1 File2 Proj2\\ File3 File4 |
然后在Proj2中,您可以svn:externals Proj1,最后得到:
1 2 3 4 5 6 | Proj2\\ Proj1\\ File1 File2 File3 File4 |
现在,如果要在1个文件夹中包含2个项目的文件,例如:
1 2 3 4 5 | Proj2\\ File1 <- from Proj1 File2 <- from Proj1 File3 File4 |
那我不认为SVN支持该功能。
但是,我与其他源代码管理工具一起使用,可以让您将单个文件从一个项目"链接"到所需的任何位置(特别是Borland StarTeam)。