相信每一个学习编程的人都会接触到这么个东西——版本控制系统。说不定很多人都已经用上它了,却仍旧没搞清楚它是什么东西,比如说我。
刚开始只是身边大佬强行安利我了这么个工具,说是一个巨好用也巨实用的玩意儿,大致用法也简单的学了一下,但实际这个工具究竟是个什么东西?这个工具用于什么场景?使用这个工具的好处在哪里?我全然没有搞清楚,直到开始学编程的时候再次遇见这个工具。
刚开始使用是让大佬什么都帮我配置好,自己只需要利用三方提供的操作界面进行提交推送罢了,轮到自己学到这里,尝试自己去从头开始去操作的时候发现自己还有很多没搞清楚的地方,故此在这里将自己这几天学习整理出来的东西记下来。如有不足之处,望看到的人能够指正。
什么是版本控制系统?
版本控制系统(Version Control System,简称VCS),什么是版本控制系统呢?这个问题,完全可以用另一个问题——版本控制系统可用于什么场景——的答案来解答。
比如:
策划按甲方意思改了四五遍,甲方说要第一版……
毕业论文按照指导老师意见改了八九版,老师最后说第五版查重率最低,启用第五版……
作者灵感突发,兴致勃勃编了一长串文字,中间添添改改好几回,却发现越改越没有最初的感觉了,想换回最初的描写……
程序猿改bug,最初一个bug,一周后变五个bug,心塞地想回到只有一个bug的时候……
这种时候就需要版本控制——从一开始就将自己每一次编辑、修改的版本,都做好标记完整地备份下来,将来需要的时候根据自身做好的标记,找出对应的版本。
而版本控制系统简单来说就是——从一开始就将自己每一次编辑、修改的版本,都做好标记完整地备份下来,将来需要的时候根据自身做好的标记,找出对应的版本等——这一系列行为的系统化。
使用版本控制系统的好处在哪里?
肯定会有人这么想,既然手动都可以版本控制,直接手动控制不就得了?干嘛还要装一个版本控制系统,那不是很鸡肋吗?
相信经常刷视频资讯什么的人一定听过这么一句话:抛开剂量谈毒性就是在耍流氓。
这里套用一下:抛开需要处理的量来谈实用性就是在耍流氓!
同样是进行版本控制,你当然可以手动控制版本,一两个文件尤其是只需要小改,最多也就只需要备份个两三回,三四回的时候;但如果改动的地方比较多,比较大,需要处理的文件多范围广的时候呢?
进行手动备份,虽然麻烦了些,可能还是弄得下来,但这种情况下回溯的时候,又如何区分知道哪个版本是自己想要的版本呢?在备份的时候做注释?每版都手动加入一个注释文件,然后在查找的时候挨个点开去找?
显然,这将是一个不小的工程量。
再者,从最早创立的版本控制系统 SCCS(Source Code Control System,1972年由贝尔实验室的 Marc Rochkind 于用 C 语言开发)到现在,几十年间,版本控制系统这种工具,早已从最开始单纯用于控制文件和历史记录更改的系统,进化成现在用于协调程序员在软件开发过程中协作开发源代码工作的系统。
到现在,版本控制系统所能进行的操作远不是“手动操作也就稍微麻烦点“可以代替的了。
如何选择版本控制系统?
上面也说了,从最初的版本控制系统发布到现在,已经过去几十年了,应该不会有人以为版本控制系统只是一个系统的名称吧?
实际上版本控制系统是一类系统的统称,既然都说是一类了,肯定不是一两个能打发得了的了。
作为一个菜鸟,其实我并不关心在这漫漫几十年光景中,版本控制系统是如何变迁的,也不想关心,那么多可选择的版本控制系统都有些什么特色。我只关心,既然它们有那么多,我该学哪个?该用哪个?
这是一个非常明确的答案:哪个的用户最多,选哪个。
为什么呢?
拜托,现实不是偶像剧,而且与计算机操作系统不同,会用到版本控制系统的多半都不是门外汉,请不要怀疑市场经济的结果和大佬们的眼光。
而且,最最重要的一点是,无论是刚接触编程的,还是学的七七八八,想要小试牛刀的小可爱,除非你可以一学完出来就从不假手于人,独自开发项目,那你想用什么都无所谓,甚至不用版本控制系统,你喜欢手动备份,您开心,随你;否则你未来都还是要接触前辈们的,然后,前辈们都在用的版本控制系统你能不学?毕竟本着少数服从多数的原则,让人全公司为了迁就你而集体更改版本控制系统这件事,如果你就是老板,请随意。
话到这里,就不得不提最受欢迎的两大版本控制系统 Git 和 SVN(Subversion)了,很不幸,到我写这篇博客的时候,SVN 已然式微,但它与 Git 其实各具优点,尽管这个优点也许在不久的将来也会被 Git 所借鉴……
呐,人类的发展本身也是个相互借鉴,相互成长的过程。
码字不易,请转载的各位务必注明出处——Eva0110——呀。
虽然感觉这一篇基本不会有人看就是了。