我们有兴趣从支持共享或链接文件概念的a source control system迁移。
共享文件意味着:在一个项目中修改的文件会在使用该相同文件的每个其他项目中自动更新。如果没有开发人员不得不请求它,反向集成它,请求它,甚至不需要它,它就会这样做。
我们正在尝试查看是否有其他常用的源代码控制系统能够满足我们的需求,并包含链接或共享文件。我的有限研究表明:
还有别的吗? (除了我们目前的源代码控制产品,显然)
答案 0 :(得分:8)
我已经使用Sourcegear's Fortress(一个包罗万象的ALM - 仅用于源代码管理,查看他们的Vault产品)多年没有投诉,它支持共享。您实际上可以将文件从一个项目分支到另一个项目,第二个副本将保持最新,无需额外的交互。
该产品旨在替代Sourcesafe,由于VSS支持共享,因此Vault也是如此。 作为附加功能,它们支持“固定”,即文件链接的收件人可以将其设置为特定版本而不接收任何其他更新,如果这是他们想要的。如果他们没有固定文件,他们将继续使用最新版本,但如果他们需要,可以选择固定任何一点。
答案 1 :(得分:2)
我不知道你有多少自由度来解决这个问题。但是,听起来这个问题的一个更传统的解决方案是构建一个库,它是依赖于它的项目的外部。在“官方发布”的位置引用库(assembly,.jar,.so,.pm等)。
让“mod down”开始没有按照要求回答问题,但它确实听起来像给我错误的排序。
答案 2 :(得分:1)
井源安全是显而易见的支持这一点(它在各方面都可怕地被打破,但确实支持这一点)。 我想知道sourcegear的保险库是否也支持这个,因为它应该是sourceafe的固定版本。
答案 3 :(得分:1)
基于Roboprog的答案:对您的问题更一般的解决方案是更新“共享目标”中的makefile,以便它们通过引用合并来自“共享源”的项目,而不是依赖于SCC系统来执行此操作。他们。
如果可以很容易地将常用功能分解到库(程序集,jar,C ++头文件库和库)中,那就太棒了!从长远来看,这将有助于每个人。现在可以使用各种独立工具对库进行单元测试;由于双方的合同已经标准化,消费它也变得更容易。此外,您现在可以将库视为一流的公民WRT变更管理。可以在他们自己的分支中进行突破性的变化;来自共享代码的其他团队的修复程序可以与应用程序的其余部分一起在存储库中流动;等等。
但这些都不是绝对必要的。即使您在1个分支中执行所有操作,或者即使所讨论的共享是单个foo.h,您也可以继续使用现有的SCM实践,只需进行一些调整即可。我遇到的每个构建系统都能够将模块A中的文件合并到模块B中,只要相对路径正确即可。如果您使用的是Visual Studio的* proj makefile,最快的方法是Add - >现有项目 - >导航到源文件 - >单击“保存”按钮上的下拉箭头 - >添加为链接。
答案 4 :(得分:0)
我认为您将遇到的一般问题是更改每个存储库中的文件将需要提交,以便保留历史记录。
git
是一个很棒的版本控制系统。它们有子模块,可以用来做你想要的,除了每个存储库的维护者需要发出一个命令来升级“共享文件”集。
假设您有一个子模块REPO/share
,每个要升级的存储库都需要:
cd REPO/share; git pull
如果你真的想要,你可以100%使用git hook自动化。