阿里妹导读
本文作者用幽默又真实的文字总结了开发者日常工作中遇到的那些事儿。
说点真实的
众所周知啊🤔,很多公司的度量系统可以展示你提交了多少次commit,以及每一次提交包含多少行代码。搞得部分兄弟一天可劲 add commit push。他那一个变更发上线,你打开Git Log,好家伙那一大串都是他。加加减减缝缝补补,最后一共改了20行代码,硬是刷出了200行的功德。一串Git commit message如下:AoneBuild Merge feautre/777_平台赋能牛逼新特性 to masterFix老板CR中建议fix againfix2fixsaveupdatenew feature典!典中典!
仿佛能看到他信心满满,直接发预发!一刷新, 哦豁,白屏!
哦忘了传这个了,fix,push,部署,玩手机,抬头一刷新,哦豁,白屏!“线上bug!
很急,来不及加单测了,帮忙过一下!
“
对代码系统机魂, 了如指掌,深谙取悦机魂之道。知道一些外人看来十分玄妙的独特逻辑。掌握很多,“又不是不能用,只是你不会用,要这么这么就能用”的高级黑盒功能。虽然兄弟们这么用Git “又不是不能用”,但是要我说 “那是你不会用”,“要这么这么用”
到这里,聪明的小朋友就要问了。为啥几百个文件,为啥能用一两个G呢?Git的结构,图文实例解说
众所周知,Git 主要数据结构是一颗树,在你的.git文件夹里,结构是这样的。然后你在每一改个两行,就来个commit,存储膨胀能不快么!
就不谈没维护好 gitIgonre,胡乱git add .把编译文件,摸鱼刷的leetcode代码或者其他奇奇怪怪的东西提交到Git中的情况了。你可能会问,我这的文件已经都删掉了,为啥.git还有这么大?你们是不是有Bug?因为Git会保存你历史的所有版本!除非没有一个任何一个commit指向这个blob,才会成为游离节点,在Git Gc的时候被处理掉。当然Git也没那么呆,是可以存增量的。你在Git pc的时候会执行repack,repack会压缩一部分到增量,不过一般没人这么做,所以一般都是存了完整的离散文件。git gc是个好课题,存储未来可能可以智能化的全自动gc,但是现在还不行。因此!没事删删分支!不小心提上来的大东西,得把对应的commit squash掉!本地也可以允许git gc清理掉游离节点释放空间。我们并不是说要squash到一个变更一个commit,或者一个feature分支就一个commit。就像游戏存档一样。你可以在关中频繁存档,但是一大关打完了,你可以存一个然后把关中的存档都删了。 只留关键节点,这样万一你后悔选了这条命运线,可以读档重来。这也是为什么那些大库需要严格执行主干开发的原因。要是我们公司几万研发都用一个大库,还都是用Git记日记的憨批, 我觉得我们会被迫在存储技术上卷死OSS。坏了,顺手把多版本云盘做成主营业务了。以后新人来了先发一块移动硬盘好了, 微服务那么多系统,下代码不得先下个半个月?总结
一是git log和commit message是很重要的信息来源,要保持整洁,用的正确,这个比发布文档还清晰。二是代码存储膨胀问题是很现实的, 随着系统发展,代码库一个G你还能下下,再大点咋办呢。虽然我们存代码不收费,说到这儿dataworks的兄弟们可能有同感, 不要钱就使劲造,狠角色拿git当oss用的都有几个。。主要影响的,还是可见的未来,不治理的话,clone代码越来越慢。Best practice:
1、Code Owner要建立 代码库统一的commit messgae 格式规范,例如 Feature(commit): write an article to introduce git2、打完Boss,单测通过,squash掉你之前上厕所或者测试时候的commit!化零为整但也不要矫枉过正!团队应该根据自己业务情况探索合适commit的大小和规范。3、重构掉“巨石类”!他们早就不够内聚了!把能拆掉功能拆出来吧!我先替管存代码的那个亘古和其他用这个类的开发先感谢你!4、大文件用Git LFS!5、及时维护GitIgonre!误提交的文件一定要清理掉!6、用心维护主干分支的Git Log!让改动清晰可见!7、删掉没用的分支!Later Equals Never!当机立断舍离!8、Readme要持续更新!怎么启动,格式规范都可以写在readme里!Bad Practice:
1、不要建 feature,release这两个分支,虽然git没有保留关键字,但是后人发现为啥建不出来分支的时候肯定会问候你的。2、不要多分支并行开发的时候merge 来 merge去, git会脏合并! 保持提交历史干净简单!业务太复杂不行咱就上主干开发!不要每次代码合并不符合预期就跑去找管代码的同学说Git丢代码,这种侦探服务的难度挺大的,在我建议按次收费!