在生活中,一个好的习惯就是常于备份,而Git就是来帮助我们备份代码的。
也许你遇到这样的情况:你做出了一个软件并上线给到用户在用,用户在用的过程中,哪些功能体验不好,你要去改善,这时候你要在原有的代码基础上做修改,但改之前,得做下备份,别改崩了呵呵。这时候你就有了文件A,当你将用户提给你的这些方面改善好了,这时候你就有了修改文件B。
当又有用户觉得其他方面体验不好,你还得改,又多了文件C,依次一直文件D、E、F、G …直到无限。
这时候问题来了,假如当某一次改动上线后出现严重bug,在时间不允许时,你就得拿出最近一次备份的文件先顶一顶(俗称版本回滚),这个其实还好办。但假如不是最近一次,而是很久之前的,你这时候就需要去文件ABCDEFG…一个个去找,而此时面对着ABCD…的文件,你完全想不起来,当初备份的这个是啥?
这时候聪明的先贤们就想出了这么一个办法,叫版本管理器。
目前市面上优秀的版本管理器有两个:
①集中式的SVN
②分布式的Git
版本管理器既然是帮我们做备份的,那么问题来了,备份的文件放在哪?SVN既然是集中式的,那肯定就是中央集权,有一个统一的文件服务器存放这些文件,每个人单独与之做沟通,但集中式的注定了当作为核心的SVN服务器挂掉之后,所有人都没法干活。而Git,它高明之处在于,人人平等,每个人都有一个完全属于自己的独立仓库,尽管它也有一个中间的交互服务器,但那仅仅只是作为一个中间媒介,当中间节点挂了,你本机有一整个的图书馆,不会对你有过大的影响。
本次我们就来看一看Git。
Git安装啥的这里就不说了,装好Git,能纯命令行当然好,不过新手建议装个小乌龟TortoiseGit(这个也有SVN的,TortoiseSVN),装完大概这样吧:
装好Git之后,先来看看Git此类的版本管理工具到底怎么帮我们备份文件的。
备份文件按照常理来说,需要做以下事情:
1、谁备份的?
2、啥时候备份的?
这些不用我们开口Git就帮我们做了。接下来:
3、需要备份哪些文件?
4、备份的这些文件是干嘛用的?
与单人备份有些不同的是,这是多人备份。你有可能你要备份的文件,在你备份之前被别人改过,而你手里的文件暂时没有别人改过的那部分代码,甚至那部分代码你也改了,这样跟假如JavaScript是多线程,操作DOM时,浏览器要听谁一样。这时候,Git要听谁的呢?所以需要:
5、更新别人的代码。
6、看看是否有冲突,处理冲突。
7、你提交代码,Git完成代码备份。
我们一起看一个图:
好了,你知道Git怎么帮你备份了,那你要做的就是配合它,把流程走完(尽管你特别烦,走流程、走流程…烦不烦啊),但你要做的还是要配合,因为Git就是机器人,而且不是智能的,会自主学习和变通的,它只能走流程。
先看一看Git的命令行界面(还记得那个Git Bush Here吗,点开,个人用起来比原生命令行界面好看、好用很多)
我们陪它走一遍流程(这里暂不涉及到创建库,删除库,切换分支,回滚等等),因为一般情况下,仓库不会由新手去建= =,直接从克隆一份远程仓库的代码开始,看下图:
这就是最常见的走流程,Git没什么,就是走一个备份的流程,SVN呢?它的流程其实也差不多,而且SVN连本地仓库都没有,更简单。
好了,走完了命令行,这里也来走一下小乌龟(TortoiseGit)。
还是走流程,只不过变成可视化了,你不用敲命令了。
看到刚刚右键菜单的git 克隆了没?点击它,也可能是未汉化的git clone(跟你clone命令一样,clone就是克隆的意思)。
输入你的url,这个url可以是github上的,一般公司开发大多是局域网的gitLab。看一下github的:
克隆下来了,本地就有了一个仓库。
我们顺便可以看一看分支,因为一般情况下,Git会有一个主分支master,你是没有权限提交代码的,还有一个work或者develop分支,这个是给你开发提交代码用的,而master是给管理员最终测试完合并代码用的。
我们这里只有一个master主分支:
好了先不管命令行,开始我们的小乌龟走流程之旅吧。
假设我们新增了ccc.txt文件,同时又修改了里面的bbb文件。变成这样:
继续走流程,这时候好像得走到 add 那里了吧?嗯是的。
点击Add。点确定就好了。实际上就是执行一句git add .,看看你新增了哪些文件。
接下来流程走到我们要更新代码看看有没有别人更新了啥对吧?再看看需不需要处理冲突。
也就是fetch和merge。(这两个合起来就是pull)一个个来:
fetch:点击上面的fetch,到这里
嗯行,看看你更新了啥。然后按close关掉界面。
这里我们刚刚才clone下来的,所以没啥其他别人的代码。
接下来就开始合并了,将我们的代码先在本地仓库进行合并(这里没其他人代码不用处理冲突。),记得勾选no commit,先别提交我们的commit,最后一步再commit
好了之后,看到是最新的,无需处理冲突。这时候点commit。
这里还记得上面的git commit -m ‘你这些备份的文件是干嘛的’。这时候你就要写你干了啥了。
将我们这些文件是用来干嘛的告诉Git之后,是不是就剩一个流程,那就是提交了?
点击这个push,push就是推,推送的意思。
这样我们就完成了我们的推送,看一下远程仓库更新了没。真的更新了哈。
这样我们就完成了整一个的克隆、更新、提交代码的流程。gitLab也是一样的。
有一个有趣的情况就是,这种有时候是很容易覆盖别人代码的,特别是对于新手而言,emmm…没事,覆盖就覆盖嘛,一个月每覆盖3次,绩效扣1分,扣3分封顶。这个是一个还行的建议,防止乱来,是不?= =
热门评论
这也叫文章吗?浪费流量
这也叫文章吗?浪费流量
这也叫文章吗,浪费流量