交付品的版本控制
我们需要在多个不同位置的许多开发人员之间定期同步许多二进制文件(项目可执行文件和DLL),以便每个开发人员都可以使用最新的环境来构建和测试。由于项目的性质,必须经常且按需进行更新(过夜更新是不够的)。这不是很漂亮,但是我们坚持了一段时间。
我们决定使用常规版本(源)控制系统:将所有内容作为二进制文件放入其中,在测试之前获取最新信息,然后在测试之后签入更新的DLL。
它可以正常工作,但是版本控制客户端具有许多对我们没有意义的功能,有时人们会感到困惑。
有没有更适合该任务的工具?还是完全不同的方法?
更新:
我需要澄清的是,它不是一个紧密集成的项目,更像是带有大量"插件"(包括第三方)的可扩展系统。我们需要确保这些模块插件与彼此和内核的最新版本配合良好。最初考虑了建议的集中式构建,但这不是一个选择。
解决方案
回答
我们应该研究持续集成,并采用某种集中式构建过程。我只能想象我们当前使用的方法会遇到什么样的麻烦。
显然,这不利于保持本地文件同步,但是我认为流程存在更大的问题。
回答
我可能会看一下rsync。
只需创建一个.CMD文件,其中包含对rsync的调用以及所有正确的参数,然后让人们调用即可。 rsync在决定文件的哪些部分需要传输方面非常聪明,因此即使涉及大文件,它也将非常快。
尽管rsync不能解决冲突(甚至检测到),但是在我们描述的场景中,它更像是从中央读取内容,这是rsync旨在处理的内容。
回答
建立项目应该是一个集中的过程,以便更好地控制,从长远来看,解决方案将是麻烦的。无论如何,这就是我要做的。
- 为每个项目的源文件,资源,文档等创建常用存储库。
- 创建资源存储库。每个项目都会有最新的二进制版本,以及任何所需的资源,文件等。每个项目都应保持良好的文件夹结构,以便开发人员可以直接"引用"文件。
- 为最终文件创建一个存储库,以存储实际的稳定版本。这样会从签入源中自动获取(如果可能)稳定文件。这将保留真实的产品,用于集成测试的真实版本,等等。
尽管远非完美,但我们将能够定义完善的协议。在此处签入最新的dll,并在此处从最新来源生成"真实的" versin。
回答
将" what"字符串嵌入可执行文件和库中怎么样?然后,我们可以将所需的版本列表与清单同步。
我们倾向于将CVS id字符串用作what字符串的一部分。
const char cvsid [] =" @(#)INETOPS_filter_ip_ $ Revision:1.9 $";`
输入命令
什么filter_ip | grep INETOPS
退货
INETOPS_filter_ip_ $修订版:1.9 $
我们对所有可交付成果都执行此操作,因此我们可以查看一堆库和可执行文件中的版本是否与关联清单中的列表匹配。
HTH。
干杯,
抢
回答
Subversion可以很好地处理二进制文件,速度非常快,并且可以编写脚本。 VisualSVN和TortoiseSVN也使处理Subversion变得非常容易。
我们可以设置一个从Subversion中检出的文件夹,其中包含所有二进制文件(所有开发人员都可以推送和更新到该二进制文件),然后在命令行中键入" svn update",或者使用TortoiseSVN:右键单击该文件夹,然后单击" SVN Update",它将更新所有文件并告诉我们更改的内容。
回答
另一种选择是统一