Git学习教程(一):git简介-阿里云开发者社区

开发者社区> 开发与运维> 正文

Git学习教程(一):git简介

简介:
第一课. git简介
内容:什么是git,为什么要使用git以及获取和学习git的途径。
 
 
欢迎来到github学习教程的第一课。本教程将通过一系列的实例来介绍如快速,轻松地使用Git。教程中会有很多屏幕截图,希望这样可以让你更好的学习和理解。
本节简要介绍git的概念和为什么应该使用它

 
git是一个快速,开源,分布式的版本控制系统。因此,它在(开源)和(协作编程社区)很快取代了svn。

版本控制系统 
首先,git是一个版本控制系统,用来保留工程源代码历史状态的命令行工具。类似于SVN,CVS或者Perforce等工具。

当你需要得到以前的一个保存点时,你可以利用它来追踪项目中的文件,并且得到某些时间点提交的项目状态。你可以和合作伙伴共享这些历史状态,将他们的工作和你的工作进行合并,可以对整个工程或某些文件跟历史版本进行比较或者恢复到早期的某个版本。

因为git根本上说是一个命令行工具,所以本教程中的大部分示例都会用命令行的方式给出。教程中使用现行git版本(1.6系列)编写示例。如果使用早期版本的话,我们也建议您升级到1.6系列。当然,现在已经有很多git UI的工具,使得git变得更加简单易用。

git的安装:
下载地址
http://www.kernel.org/pub/software/scm/git/ 
安装过程:

1.$ tar xzvf git-1.6.5

2.$ cd git-1.6.5

3.$ ./config --prefix=/usr/local

4.$ make

5.$ sudo make install

6.$ git --version

如果需要命令帮助的话,可以键入'-help'就会显示出
操作手册。你也可以键入'git help command'实现同样的目的。

$ git log --help
$ git help log

开源 
git是一个开源项目,有很多年的历史了,它的大部分内容都是用C来写的。
你可以得到整个项目的源代码,加以分析和改进。下载源程序的地址:git-scm.com/download。git许可证:GNU通用公共许可证(GNU General Public License)
离线,速度快
   git是完全的分布式处理,这意味着它可以离线工作。跟VCS工具例如Perforce或者SVN完全不同,Git的所有操作几乎不需要网络连接,包括历史回顾,差异显示和提交。

这也意味着Git比其他的VCS工具要快很多,因为某些VCS工具对网络的依赖会导致时间上的延迟。下面来看看'log'命令分别运行在git和SVN上的结果:

[master]$ time git log > /dev/null

real 0m0.352s
user 0m0.300s
sys 0m0.034s 

$ time svn log > /dev/null

real 0m3.709s
user 0m0.482s
sys 0m0.168s

git仅用了0.3秒而SVN用了3.7秒。你会发现几乎所有的命令都有这样的时间差异。例如,添加知名的famfamfam出品的图标集并提交,因为使用git可以将【提交(commit)】和【上传('push')网络】这两个步骤分开,其中【提交(commit)】git只用1/4秒,而SVN会用到45秒。
time 'git add icons; git commit -m "added icons"'

real 0m0.273s
user 0m0.032s
sys 0m0.008s

time 'svn add icons; svn commit -m "added icons"'

real 0m45.276s
user 0m15.997s
sys 0m5.503s

即使是再加上用git 提交(commit)之后再上传(push)到网络共享仓库中的时间,也比SVN的耗时要少的多的多。
time git push

real 0m6.219s
user 0m0.023s
sys 0m0.011s

如果你仅仅是想提交然后继续工作,你就会感觉到时间上的巨大差异--因为git的工作流程跟以前的版本控制系统不大一样。git的命令大部分都是即时的,不像以前,执行'svn commit'命令之后,可以喝杯咖啡再回来继续工作。

比svn更小
git比较节省空间。举例来说,一个Django项目如果使用现行的源代码控制系统(source control systems)来实现版本控制的话,git克隆(clone)是最小的。
$ du -d 1 -h
108M ./django-bzr
 44M ./django-git
 53M ./django-hg
 53M ./django-svn

更神奇的是,虽然git克隆比SVN要小很多,但是git克隆包含整个项目的历史版本---从第一次提交之后的每一个文件的每一次提交的版本都囊括了。然而,SVN只包含项目的最后一个版本。

快照,而不是变更集

跟其他的VCS工具不同,git是基于快照的。不再是考虑将提交点存储成补丁文件,而是在你提交项目的时候对项目做一个简单的快照。

提交的东西包含一些元数据(提交信息(message),作者,日期等等),一个提交点指向这次提交时项目的快照。

记住这个图对于给定情形下使用Git是非常有帮助的。
如果要了解更深层次的Git存储数据的只是,可以访问Git for computer scientists
分支和合并
也许git最显著的一个特点就是它的分枝模型了,因为它改变了开发者工作的基本模式。以前的VCS工具分枝的方法是对每一个分枝都放到一个独立的目录中。而git可以让你在同一个工作目录中切换(switch)到不同的分枝。创建和切换分枝几乎是即时的(instant),而且并不是所有的分枝都需要上传到git仓库中去共享,对于某些你更愿意隐藏在本地的工作来说,git无疑提供了很大的便利。从这点上来说,git确是有其独到之处。
摒弃了CVS只对项目开发主线创建分枝的做法,git开发者可以随时创建,合并,删除多个分枝。通常对于实现某个功能或者每个debug阶段,都可以创建它的分枝,当完成之后再将其进行合并。这种模式可以让开发者体验更加快速,简便,安全的方式来开发项目。它鼓励一种非线性的开发周期,它可以说是并行的多线程模式而不是多个步骤串行的模式。
安装git
参见git community book中对于git安装在不同操作系统中的说明。
资源
关于git的更多信息,可以参考git-scm.com




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/244397,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章