1 Git的诞生很多人都知道,Linus在1991年创建了开源的linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了 。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用 。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符 。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统 。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气 。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权 。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的 。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下 。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,php,Ruby等等 。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了 。
git与github的交互:
文章插图
2 安装git bash工具要使用git及与github交互,需要使用一个命令行工具bit bash,下载并安装它 。
3 初始化本地库通过clone远程仓库或本地创始化,会创建一个.git文件夹(隐藏属性) 。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库 。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD 。
4 修改本地库先对readme.txt做个修改 。
然后,在工作区新增一个LICENSE文本文件(内容随便写) 。
用git status可以查看状态 。
5 添加文件到暂存区使用两次命令git add,把readme.txt和LICENSE都添加 。
现在,暂存区的状态就变成这样了:
文章插图
6 将暂存区的修改提交到分支git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支 。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的 。
现在版本库变成了这样,暂存区就没有任何内容了:
文章插图
7分支管理分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了 。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险 。
现在有了分支,就不用怕了 。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作 。
【Github入门使用指南】在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
推荐阅读
- 瑜伽入门体式有哪些?
- java日志logback入门
- XMLHttpRequest使用入门
- 黑客入门该知道的安全测试各种姿势
- PostgreSQL 入门
- 大学生计算机一级:160集入门视频教程 大学计算机基础试题
- 黑客入门,MSF和Kali哪个更厉害?小白该如何选择?
- Dart 语言基础入门篇
- 如何使用 Ansible 同步 GitHub 和 GitLab
- PHP 安全问题入门:10 个常见安全问题 + 实例讲解