Git学习教程(一):git简介
2009-12-16 13:24:52
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 |
第一课. git简介 内容:什么是git,为什么要使用git以及获取和学习git的途径。
欢迎来到github学习教程的第一课。本教程将通过一系列的实例来介绍如快速,轻松地使用Git。教程中会有很多屏幕截图,希望这样可以让你更好的学习和理解。 本节简要介绍git的概念和为什么应该使用它
git是一个快速,开源,分布式的版本控制系统。因此,它在(开源)和(协作编程社区)很快取代了svn。 版本控制系统 首先,git是一个版本控制系统,用来保留工程源代码历史状态的命令行工具。类似于SVN,CVS或者Perforce等工具。 当你需要得到以前的一个保存点时,你可以利用它来追踪项目中的文件,并且得到某些时间点提交的项目状态。你可以和合作伙伴共享这些历史状态,将他们的工作和你的工作进行合并,可以对整个工程或某些文件跟历史版本进行比较或者恢复到早期的某个版本。 因为git根本上说是一个命令行工具,所以本教程中的大部分示例都会用命令行的方式给出。教程中使用现行git版本(1.6系列)编写示例。如果使用早期版本的话,我们也建议您升级到1.6系列。当然,现在已经有很多git UI的工具,使得git变得更加简单易用。 git的安装:
安装过程:
如果需要命令帮助的话,可以键入'-help'就会显示出 操作手册。你也可以键入'git help command'实现同样的目的。 $ git log --help $ git help log 开源 git是一个开源项目,有很多年的历史了,它的大部分内容都是用C来写的。 你可以得到整个项目的源代码,加以分析和改进。下载源程序的地址:git-scm.com/download。git许可证:GNU通用公共许可证(GNU General Public License) 离线,速度快 这也意味着Git比其他的VCS工具要快很多,因为某些VCS工具对网络的依赖会导致时间上的延迟。下面来看看'log'命令分别运行在git和SVN上的结果:
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是非常有帮助的。 分支和合并 摒弃了CVS只对项目开发主线创建分枝的做法,git开发者可以随时创建,合并,删除多个分枝。通常对于实现某个功能或者每个debug阶段,都可以创建它的分枝,当完成之后再将其进行合并。这种模式可以让开发者体验更加快速,简便,安全的方式来开发项目。它鼓励一种非线性的开发周期,它可以说是并行的多线程模式而不是多个步骤串行的模式。
|