把构建软件的一切事物都放在版本控制中, 这话怎么理解?
如题,在持续集成中有这么一种说法,就是讲构建需要的所有东西全部扔到版本控制中去。 不是太明白为什么要这样做。
另外, 如果工程中使用到了第三方的库, 这些库的二进制文件也要签入到版本控制中去吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如题,在持续集成中有这么一种说法,就是讲构建需要的所有东西全部扔到版本控制中去。 不是太明白为什么要这样做。
另外, 如果工程中使用到了第三方的库, 这些库的二进制文件也要签入到版本控制中去吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
你可以把这些第三方库也签入版本控制中,这样的好处是,所有人check out之后无需另外的操作,就有所有的依赖的库了。坏处是会让你的库有些臃肿。
否则还有一种办法是你要维护一个第三方的列表,记录上所有的第三方库,并且通过某种机制,给所有开发者自动安装管理这些库。比如ubunut的apt-get install,或者python的pip install等等
我觉得这句话应该这样理解:
仅仅通过版本库中的文件(脚本),就可以构建出一个成品软件。
根据这个原则,你可以编写一个脚本,用来下载和安装第三方库, 使用git, apt, pip之类的包管理器,很简单。最后实现,只需下载版本库,并运行一个脚本,就能构建出成品软件。
目的是为了最小知识的情况下,可以编译构建软件。
都放到版本库,用户只要checkout,build即可。最少知识。
如果有些依赖文件不在,就需要有人(或者文档)指明以依赖文件在哪里,如何下载,那个版本,放置何处。。。blabla。。。知识爆炸。还得依赖人。
我有时候会以咨询方式进入某个team,为了了解产品代码,需要的第一个步骤就是build。有些产品,build一次,不找N个人是不过去的,找不到的人,就等。深恨之。不过是build一个软件,如此麻烦。不想玩了。后来,我就要求必须提供Ant Makefile 之类的,必须一步构建,然后世界安静了。
而有些checkout来,虽然无构建帮助文档,进入打开solution就可以跑出成品,舒服。
二进制加入版本库的问题:好处是在build的时候,无需管依赖关系(因此的好处,前面提到了)。坏处是占用版本管理开销。我的选择是丢进去。是不管这个开销的,硬盘空间算什么。