Git原理
本文首发于公众号“```玖玖君```”,欢迎微信搜索“玖玖君”来和我一起每天进步一点点
Git是我们日常开发的必备工具,是团队协作的利器。Git使用广泛,而之所以如此流行,主要和它的一些突出的优点分不开。
真正的分布式
我们在使用Git时,无论是从远程仓库clone代码,还是把本地的代码推到远程的新仓库,都是完成的克隆一份代码。相当于是复制了一份代码到别的地方,也就是备份。
而且Git是去中心化的,这个去中心化简单理解就是每一份代码都是可以独立编辑使用的,不会因为某一个机器上的代码丢失了,而导致所有人都丢失代码或无法工作。
在 Git 中的绝大多数操作都只需要访问本地文件和资源。
举个极端的例子,假设公司的开发团队的代码都托管在GitLab上,如果有一天,GitLab突然挂了不能用了,会出现什么情况?实际上对我们开发影响不大,因为我们每个人的电脑上都有一份代码,代码并没有丢失,大家还是可以继续开发。
有影响的是团队协作,大家没法同步代码了,也就是把大家开发的代码合并在一起看效果。而这个也很容易处理,因为我们可以自己搭一个Git服务器,这个也是比较简单就能实现的。
Git是台时光机
Git存储了跟踪文件的每次提交的快照,我们每次提交一次(commit),Git就保存了一次。以后我们可以随时回到某一次提交(Commit)。使用git log命令可以查看当前分支的所有提交记录。
这里也引出了一个Git使用习惯,就是即时提交(Commit)。只有即时提交了,后续如果发现代码有bug,才能回滚到最理想的位置。当然也不是随便写几行就提交一下,那也是蛮累的。主要是一些必要的节点,比如完成一个小模块小功能等。
Git的使用
Git使用起来也比较简单,既可以用命令行也可以用第三方的工具,比如Android Studio自带的Git插件,Mac下的Sourcetree等。但是尽管像Sourcetree已经做得很人性化很简化了,在实际使用过程中我们还是难免碰到一些奇怪的问题,有时候是软件使用不熟悉,特别是使用一些相对高级一点的功能,比如回滚,合并冲突等。
我之前也是很依赖Sourcetree,一来是因为如果用命令行,需要记住很多的命令;二来是因为Sourcetree这样的软件相对来说比较直观,心里更踏实一些。
直到有一次,用Android Studio的Git插件推送的时候,推错分支了!然后为了回滚,在Sourcetree上忙了好一阵还是没有抹掉“犯罪证据”!后来还是同事帮忙弄的,很是尴尬!
这次教训让我慢慢开始切换到用Git命令行为主,Sourcetree为辅的路子上来。现在基本没有Git的问题困扰了。
用命令行的好处:
命令行其实熟悉了以后最简单,因为不用去熟悉新的软件工具,而且平时实际上也只需要其中几个常用命令,没有想象中的那么难
再也不会出现一些特殊的莫名其妙的意外,比如上面我碰到的,新建完分支直接被推到远程的老分支,因为远程找不到新分支。而如果用命令行推的话,Git就会报错,并提示你解决方法了
学会命令行其实是一件一劳永逸的事,不分平台和系统,统统都一样使用。
减少电脑负担,Mac上Android Studio多开几个工程就卡了,内存设置多大都没用,如果为了拉取推个代码还得再开个软件,那岂不是雪上加霜!万一卡住了,多点了几下误操作怎么办?(当然,我实际上还没遇到过)
高大上!哈哈...
几个建议:
尽量过度到命令行,遇到问题,查一下对应的命令是啥,并记录下来便于后期查询,慢慢记录积累,坚持个把月妥妥就熟悉了
养成随时提交(commit)的习惯,开发中完成一些小功能点就提交一下,避免几天都不提交的坏习惯
用熟悉Git命令以后,可以尝试学习一下Git的原理,比如Git是如何记录每个文件的版本变化的?Git回滚是怎么回事?Git的本地仓库和远程仓库是怎么关联起来的?等等这些问题搞明白以后,后续使用过程中碰到一些问题就比较容易找到原因和解决办法。
正是基于以上的几点,我准备把自己最近学习到的一些Git知识总结记录下来,会分为几篇文章,希望自己以后碰到Git问题能快速的找到原因并解决,也希望对大家有所帮助。
欢迎关注我的公众号查看更多精彩文章!