Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git官方网址是:https://git-scm.com/ ,打开后如下图所示:
本教程将介绍如何在分布式环境中使用 Git 进行项目版本控制,同时在基于Web和非基于Web的应用程序开发中工作。
本教程是为那些希望学习 Git 版本控制系统技能的程序员和专业人士而设计和编写的。本教程还可以作为从零开始学习 Git 版本控制系统的入门教程。本教程将一步一步地演示和帮助初学者学习 Git 版本控制系统的基本功能。在完成本教程学习之后,您会发现自己在使用 Git 版本控制系统方面具有一定的专业知识,并能熟悉操作和使用 Git 工具。
我们假设您将使用 Git 版本控制系统来处理各种Java或其它软件开发的项目。因此,如果您的软件开发生命周期可在一定程度曝光,或开发基于Web和非基于Web的应用程序的工作文档,这将有利于学习和理解使用 Git 版本控制系统 。
Workspace:工作区
Index/Stage:暂存区,也叫索引
Repository:仓库区(或本地仓库),也存储库
Remote:远程仓库
1. 有关几个名词解释
工作区: 通过git init创建的代码库的所有文件但是不包括.git文件(版本库)
暂存区: 通过git add ./*/*Xxx/Xxxx* 添加的修改,都是进入到暂存区了,肉眼不可见 通过 git status 可以看到修改的状态。
2. 什么是修改?
比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
下图是经典的git开发过程。
从一般开发者的角度来看,git有以下功能:
⒈从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
⒉在自己的机器上根据不同的开发目的,创建分支,修改代码。
⒊在单机上自己创建的分支上提交代码。
⒋在单机上合并分支。
⒌把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
⒍生成补丁(patch),把补丁发送给主开发者。
⒎看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
⒏一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
⒈查看邮件或者通过其它方式查看一般开发者的提交状态。
⒉打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
⒊向公共服务器提交结果,然后通知所有开发人员。
⒈适合分布式开发,强调个体。
⒉公共服务器压力和数据量都不会太大。
⒊速度快、灵活。
⒋任意两个开发者之间可以很容易的解决冲突。
⒌离线工作。
● Git缺点
⒈资料少(起码中文资料很少)。
⒉学习周期相对而言比较长。
⒊不符合常规思维。
⒋代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
Git --- The stupid content tracker, 傻瓜内容跟踪器。Linus Torvalds 是这样给我们介绍 Git 的。
Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。
实际上内核开发团队决定开始开发和使用 Git 来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是 Git 太艰涩难懂,从 Git 的内部工作机制来说,的确是这样。但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著名项目采用 Git 来管理项目开发.
作为开源自由原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制。
目前GIT已经可以在windows下使用,主要方法有二:msysgit和Cygwin。Cygwin和Linux使用方法类似,Windows版本的GIT提供了友好的GUI(图形界面),安装后很快可以上手,不在此做大篇幅介绍。
本文将以 Git 官方文档 Tutorial, core-tutorial 和 Everyday GIT 作为蓝本翻译整理,但是暂时去掉了对 Git 内部工作机制的阐述,力求简明扼要,并加入了作者使用 Git 的过程中的一些心得体会,注意事项,以及更多的例子。建议你最好通过你所使用的 Unix / Linux 发行版的安装包来安装 Git, 你可以在线浏览本文 ,也可以通过下面的命令来得到本文最新的版本库,并且通过后面的学习用 Git 作为工具参加到本文的创作中来。
(Snake.Zero 注:以下假设环境为Unix/Linux,本次修正主要是版本问题,git-add git-init-db等命令都改为了类似git add形式的,以免误导新手。)
版本
版 | 原始发行日期 | 最新版本 | 发布日期 |
---|---|---|---|
0.99 | 2005/7/11 | 0.99.9n | 2005/12/15 |
1.0 | 2005/12/21 | 1.0.13 | 2006/1/27 |
1.1 | 2006/1/8 | 1.1.6 | 2006/1/30 |
1.2 | 2006/2/12 | 1.2.6 | 2006/4/8 |
1.3 | 2006/4/18 | 1.3.3 | 2006/5/16 |
1.4 | 2006/6/10 | 1.4.4.5 | 2008/7/16 |
1.5 | 2007/2/14 | 1.5.6.6 | 2008/12/17 |
1.6 | 2008/8/17 | 1.6.6.3 | 2010/12/15 |
1.7 | 2010/2/13 | 1.7.12.4 | 2012/10/17 |
1.8 | 2012年10月21日 | 1.8.5.6 | 2014年12月17日 |
1.9 | 2014年2月14日 | 1.9.5 | 2014年12月17日 |
2 | 2014年5月28日 | 2.0.5 | 2014年12月17日 |
2.1 | 2014年8月16日 | 2.1.4 | 2014年12月17日 |
2.2 | 2014年11月26日 | 2.2.3 | 2015年9月4日 |
2.3 | 2015年2月5日 | 2.3.10 | 2015年9月29日 |
2.4 | 2015年4月30日 | 2.4.11 | 2016年3月17日 |
2.5 | 2015年7月27日 | 2.5.5 | 2016年3月17日 |
2.6 | 2015年9月28日 | 2.6.6 | 2016年3月17日 |
2.7 | 2015年10月4日 | 2.7.4 | 2016年3月17日 |
2.8 | 2016年3月28日 | 2.8.4 | 2016年6月6日 |
2.9 | 2016年6月13日 | 2.9.3 | 2016年8月12日 |
2.1 | 2016年9月2日 | 2.1 | 2016年9月2日 |
2.13.3 | 2017年7月12日 | 2.13.3 | 2017年7月12日 |