视频链接:
https://www.imooc.com/video/4414
简介:本课程主要讲解了git在各平台的安装和基本使用,Git能够帮助我们解决文件的提交、检出、回溯历史、冲突解决、多人协作模式等问题,并且大大提升我们的工作效率。
————————————————————————————————————
第1章 版本管理工具初探
聊聊版本管理工具是什么,它能为我们做什么。
版本管理工具的作用:
1.备份文件,
每当我们对文件做修改的时候,提交一个修改给版本管理工具进行一个保管,万一哪天电脑坏了,还能从备份中恢复。
备份是项目进行过程中,最基本的事情,因为每天的工作结果都保存在这个文件当中,如果不可预料的因素导致文件丢失了,这种损失是非常大的,
2.记录历史
网盘和U盘保留的是最新的文件状态,版本管理工具,每一次的修改提交给它后,都会如实备份,它会记录是何时,何人,进行的修改,这样,当我们需要去回溯,查找信息的时候,版本管理工具会告诉我们。
3.回到过去
找回之前提交的文件
4.多端共享
就像云备份,云服务,可以在不同的设备上,拿到最新的文件。
5.团队协作
软件开发项目,需要团队协作,
————————————————————————————————————————————
版本管理工具发展历史
CVS是第一个被大规模使用的版本工具,是集中式的,文件是保存在中心服务器上,
坏处是:如果没有办法联网,就无法工作了。
SVN是集大成者,将版本管理工具发扬光大。
git: 诞生于2005年,是linux之父林纳斯开发的,正在取代SVN,不过公司内部使用版本管理工具,替换成本非常高,所以会发现现在很多公司依旧保留这SVN,
集中式和分布式的区别
集中式需要一个中心服务器来放置最新的文件,如果不联网就没有办法提交,没有办法查看之前的记录,很多插座都没法做。
分布式不同,每一个拥有版本库的人,都可以在不联网的情况下,快速的完成文件的提交,查看历史记录,或者删除等等操作,在效率上比集中式要高很多。
github
git是代码库托管网站,而git是版本管理工具,两者不是同要给东西。
不过github的代码托管操作,是基于git来完成的。
————————————————————————————————————————
Git下载和安装
去官网下载对应操作系统的最新版本。
linux下安装Git环境
使用CentOS服务器,使用软件包管理器进行安装,可以帮助我们解决软件相互依赖的问题,
使用命令: yum install git
输入:y
查看帮助: 输入: git --help
——————————————————————————————————————————
github注册
进入github官网
免费的用户可以无限的使用公开的仓库,即使我们不花钱,也可以无限的创建项目。
但是项目被创建好之后,是公开的,有可能会被其他人看到,
GitHub的这种设定,也是为了鼓励大家开源自己的代码,形成一个良好的开源风气,
————————————————————————————
在GitHub上创建一个新的项目
为项目起名,不支持中文项目名
选择公开或私人。
私人的,可以设定谁可以查看我的项目并提交,需要花费每月7美元的费用。
————————————————————————————————————
Linux环境下检出项目到本地
作用是复制GitHub仓库的URIL到剪切板
使用命令: git clone
________________________________________________________________
Linux环境下第一次提交项目
将修改后的文件提交到版本管理工具中,
使用git status
查看工作区状态
使用git add .
建立跟踪
使用git commit
进行提交,并填写变更的评论
目的是为了再将来,在历史纪录中查看到修改的目的是什么,
再次使用 git status
查看工作区状态
没有文件要提交了,是一个干净的工作区。
使用git push
来发布本地提交,上传到GitHub上,
一方面避免我们的文件丢失,另一方面,方便伙伴拿到我们这次修改的内容。
需要输入用户名和密码
提示提交成功后,进入GitHub主页,刷新,可以看到最新提交的修改。
——————————————————————————————————————
关于代码冲突
解决冲突
冲突:就是同一个时间里,同一块代码,你也改了,我也改了,版本管理工具,没有办法处理,到底哪一个要保留下来,这时会抛出一个冲突,需要人工来进行取舍。
在第一个人提交成功后,
在第二个人提交时,就会发生冲突
这里的提交,是指使用git push命令,提交到GitHub仓库里,
推荐我们使用, git pull 将最新的代码拉下来,合并冲突,
使用git pull
使用git status
查看运行库状态
使用git diff
查看两次修改的差异
打开文件,会八仙,保留了两次修改的内容。
手动修改后,进行提交,告诉github,我们已经解决了这次冲突,
使用git pull
可以拉下来最新的版本
——————————————————————————————————————————
如何回到过去
使用git log
查看之前都有哪些提交,获得回到过去的指针
找对应时间点,复制其commit ID
使用git reset --hard
回到过去
hard指的是当前环境的版本指针,
退回去,拿到以前的代码,
使用git log
可以看到,最新提交的就是我们刚刚复制的commit
使用git reflog
获得回到未来的指针
使用git reset hard
回到未来(现实)
?过去的代码如何回到现实呢?
每发现将其复制到现实的操作啊?
——————————————————————————————————
建立里程碑
里程碑:就是我们平常看到的软件后的版本号,
每一个版本号,都意味着开发人员一段工作的完结,以及下一段工作的开始。
当软件发布以后,就需要建立一个里程碑,方便我们把一个完整的软件发布出去,
也方便将来我们去快速的寻找,某一个版本的代码去修复问题,
进入github仓库,点击release.
点击Draft a new release.
进入的界面,就是创建里程碑的界面
填写版本号,添加描述和评论
点击发布,也就建立了一个历程碑。
如果软件是开源的,其他人就可以直接通过release这个地方,下载我们这个完整的软件。
————————————————————————————————————————
分支开发之分支合并
如果发布的代码中存在bug,但发布之后的代码已经进行了多次的修改和提交
此时就需要创建一个分支,以发布的代码为基础上进行bug的修改,修改完以后,再把修改的地方,同步到我们正在开发的那个主分支上。
这样就能够在不考虑现有开发进度的情况下,把这个bug解决掉。
__________________________________________________________________
分支开发之合并到masterr
这种开发方式,更适合于开源软件的推送
————————————————————————————————————————
多人合作的一些经验
1.多用客户端和工具,少用命令行,除非是在Linux服务器上直接开发
如果是做服务端开发的程序员则更适合命令行上开发,掌握更为复杂的命令和概念
2.每次提交前,diff自己的代码,
查看提交的都是一些什么代码,
确认提交的代码
以免提交错误的代码,
我们需要对我们提交的代码负责,这样才能将来提升我们的工作效率,不会因为我们的一些低级错误导致
后续给我们带来更多不应该出现的问题
新入行的人,会犯一些低级错误,比如将调试的代码提交到版本管理工具中,导致发布的文件会有各种各样的问题。
3.下班回家前,整理好自己的工作区,
理清哪些代码是要留下来的,哪些代码是要来调试的,哪些代码可能丢掉就不需要了,
建议:在每天工作结束之前,把我们要保留的代码提交到版本管理工具上,把不需要的赶紧清除掉,第二天,能够从一个干干净净的环境上,继续做工作。可以提升我们的工作效率,
从另外一个角度上来说,提交我们的代码,也就意味着在另一个地方留下了我们新写的代码,多了一份备份,作为保障。
4.并行的项目,一定要使用分支开发
因为在项目越来越多的情况下,人也越来越多,
很可能一个模块同时要进行两个不同的项目,要修改不同的部分,相互之间可能会有影响。
使用多分支开发,可以降低影响面,提升工作效率。
5.遇到冲突时,搞明白冲突的原因,千万不要随意丢弃别人的代码
新人可能会只保留自己的代码,把别人的代码丢掉了,这种情况可能会引发非常严重的后果,
因为你可能会把别人修复的一个bug,或开发完成的功能弄丢了,
这种情况非常难发现,有可能是因为用户反馈出哪有问题,这往往会给我们的项目带来非常多的负面影响。
6.产品发布后,记得打tag,方便将来拉分支修bug。
我们打完这个tag之后,可以随时随地的通过发布链条找到代码,了解当前代码的情况,
如果不做好这件事情的话,很可能在出现问题后,都不知道从哪一个版本开始修,