回忆git陪我走过的四年。
题图:from zoommy
前言
what’s git?
- git是一个还原点工具
- git是一个网盘工具
- git还是一个支持多人共同修改网盘内容而不会冲突的工具
当然,git更多的被用在代码上。
引子
游泳回来发现手指被划开了一个大口子,正笑着自己的后知后觉,脑中突然闪出个想法。如果人生也是被git管理的,那么只要git reset一下,就可以避免悲剧的发生了。像火影忍者里的伊邪那岐,像哆啦A梦的时空机,更像是父辈人口中的后悔药。
git允许我们无限试错,用赵本山的话说就是:“错了就改,改了又错,错了再改,错错改改,改改错错” :)。
说到这里,我不禁想起了刚刚接触git的那段日子。就像那天夕阳下的奔跑。
git之路
如果从大二接触学习代码算起,我的代码生涯已近四年,有幸在第一年就接触到了git这个神奇的工具,而后者也解决了我一个又一个的痛点。
试错保障
关键词
- git commit—保存修改,亦即建立还原点
- git reset—删除所有修改,亦即还原到上次还原点
在相当长的一段时间里我都仅仅是把git作为我无限试错的保障。确定代码无误,commit;发现错误懒得改,reset。
在没有使用git的日子里,随着代码量的不断增加,添加一个功能往往要修改多个文件,一旦改错,甚至很难还原到之前的状态,这对于有点精神洁癖的我来说简直就是灾难,以至于我不都敢随意添加代码。
git的出现让我拥有了一个还原点,还原点的存在彻底打消了我对修改代码的恐惧,改起代码也更加起劲,大不了就从“头“再来:)
这确实让我爽了好久,直到有一天…
鸡蛋碎了
关键词
- git push—上传到“网盘”
- git pull—下载到本地
不知道哪位先贤说过,鸡蛋不能放在一个篮子里。这简直就是至理名言!不要问我为什么知道,我一篮子的鸡蛋都碎了…
在我短暂的代码生涯中,最令我懊悔和遗憾的不是我制造了多少垃圾代码,也不是学习效率的低下,而是那些丢失了的代码。
碎了的鸡蛋:
最令我耿耿于怀的就是上面这个”小梅音乐播放器”,这是我写的第一个完整可用的程序,虽然这款播放器简单,甚至简陋,但是源码的丢失甚至没有给我完善她的机会。
如果代码没丢,我可能依然会写写~C++~;如果代码没丢,她的功能应该会不断完善;可是没有如果,只在硬盘上保存的源码在一次意外的格盘后消失殆尽。
吃一堑长一智,在接下来的项目中,我选择了某东的git托管。git摇身一变,又成了我的代码网盘。
队伍壮大了
关键词
- git merge—把别人的修改合并到自己的代码中
- work flow—多人协作修改代码的工作流程
学生期间的项目大多是个人完成,即使有多人协作的项目也没有通过git的功能完成,多人之间只是通过简单的复制粘贴同步代码。
工作之后,有幸公司也使用git作为版本控制工具,也就接触到了git的团队协同开发,也了解到了适用各种情况的工作流。
Linus设计git的初衷就是为了满足Linux内核开发团队的协同开发需求。因此,针对各种场景都有不同的工作流来满足团队开发。这真真做到了代码不丢失,代码不冲突。了解至此,也是越发的佩服Linus的创造。
深入底层
关键词
- git cat-file—查看git存储文件的内容
- .git目录—git的大本营,所有的一切都在这里,配置,提交,历史…
别人拿给你一个盒子,告诉你这个盒子可以满足你的需求,你会放心的使用吗?我不会。git是怎么工作的?出了意料之外的问题应该怎么修复?git是否可以满足我所有的需求?
这一切只有去git的底层一探究竟。感谢《pro git》,他带我认识了这个内容索引文件系统,他带我了解了暂存区、commit是什么,他带我找到了文档的存储方式,他,让我弄清了这个黑盒的奥秘。
搞清楚原理并不只是为了满足好奇心,有了对git工作原理的认识,在解决问题时也会更加得心应手,手到擒来。
如果想学习git,还是十分推荐《pro git》这本书的。
回顾
回顾我的git使用之路,从单机版本控制到远程代码仓库,从团队协同开发到探索底层运行原理,可以说git满足了我每个阶段的需求,而我也是为了解决痛点不断的学习和使用git提供的各项功能。相信选择git的用户们也是遇到和我一样的痛点才最终选择了他。
也许,Linus当年也正是这样为了解决我遇到的痛点而造出了git这款伟大工具。一层一层的掀开git的面纱,它从未让我失望。
现在,我依然总会想起初次与git相遇的场景:)