文本是写给新手的Git入门教程。本文的目的是让新手能够快速了解并开始使用Git,因此只会介绍最基本、同时也是最核心的知识。其中包括使用Git的基本步骤和Git中最常用的命令,以及如何使用GitHub托管自己的代码。
1. 关于Git的读音
“git”读作/git/(给特),而不是/jit/(吉特)。
2. Git比SVN等版本控制工具好在哪里?
这是新手最常问的问题。我也曾在心里产生过这种疑惑,原因一方面是因为好奇心,因为在我看来,SVN已经足够优秀了,为什么又忽然冒出来一个Git呢?另一方面则是希望能通过将Git与自己熟悉的SVN进行比较,从而更快、更好地了解Git。
但是,在这里我要驳回这种疑问。不要认为Git一定比SVN好、处处比SVN好。Git有着更先进的设计理念是没错,但更先进与更好并不是等价的。工具,永远只有最合适而没有最好。
打个比方,普通的文本编辑器和功能丰富的IDE开发工具哪个好?对于我们专门做开发的人来说,可能大部分时候IDE更方便,因为有各种便捷的功能,代码提示,错误提示,自动发布,自动部署……等等。但即使IDE有这么多优点和好处,是否就能说明IDE一定比普通的文本编辑器更好呢?不能吧?
某些“极客”们喜欢把自己喜欢的东西捧上天,同时把“竞争对手”踩在脚下。个人认为这是非常不好的习惯,程序员的世界不应该有宗教。
所以,关于这个问题的答案,总结下来就是:
Git与SVN相比没有本质区别。是的,分布式并不是本质区别,就像命令行和GUI界面一样。但它有一些优点:
- 对多人协作的支持更好
- 很多操作的效率更高
- 不需要始终联网就能进行版本管理
- and more …
3. 命令行还是GUI界面?
现在有很多Git工具供我们选择,其中一些是基于命令行的,另一些则是基于GUI界面的,到底该如何选择呢?
我建议新手在学习阶段应该用基于命令行的Git工具,这样更有助于了解git各个功能的细节和原理。
可以在下面的网站下载安装Git,该网站同时提供了Windows、Mac、Linux和Solaris版本的程序:
在Windows下,另一个常用的是msysgit:
msysgit打包了一个Cygwin,从而在Windows下模拟了Linux环境,因此可以在其中运行Git程序。
安装了msysgit后,会在资源管理器的右键菜单中注册相关项目。其中“Git Bash”用于启动Git并将工作目录设置到当前目录下;“Git Gui”用来打开GUI界面的Git;“Git Init Here”则在当前目录下创建一个仓库并打开Git Bash,相当于先打开Git Bash然后运行git init命令。关于Git常用命令后面会详细介绍。
4. 在Git中获取帮助
遇到问题时查阅资料或上网搜索是很方便的,但是关于很多命令的用法在Git中已经有了详细介绍。下面就来介绍几个显示帮助的命令。
$ git help
此命令获取git使用的一般帮助信息
$ git help command | concept
显示某个命令或主题(concept不知该如何翻译,就是下面用-g参数所显示的那些)的详细帮助。例如:
git help commit #显示commit命令的详细用法
git help everyday #显示everyday帮助指南
$ git help -a
列出当前安装的git中所有可用的子命令
$ git help -g
列出当前安装的git中提供的主题指南(concept guides,不知道该如何翻译)
5. 一些名词和概念
- 版本
广义上讲,文件的每一次修改都可以称为一个版本。版本管理系统正是用来管理和跟踪文件的修改的。在版本管理系统中,每一次提交会形成一个版本记录,这些记录串接起来就是整个项目的演化历史。
- 版本库
版本库,也叫版本仓库、仓库,英文名为Repository,经常简写为Repo,是Git用来进行版本管理的主要场所。
在Git中使用init
或clone
创建一个新的版本库后,就会在当前目录下生成一个.git目录,这个就是Git的版本库,其中保存着本项目的各文件数据、提交记录、分支、配置等等数据。如果我们把.git目录删除的话,版本库也就丢失了。这一点和SVN不同,SVN会把相关数据分散到各个文件所在的目录中。
- 工作区(Working Directory)
工作区就是版本仓库所在的目录,其中的文件处于Git版本库的管理之下。使用init
或clone
创建一个新的版本库后,当前目录就成为了工作区。
- 本地仓库 vs 远程仓库
首先,本地仓库和远程仓库没有本质区别。在使用Git时,为了方便团队成员之间交换代码,通常会专门部署一台“服务器”作为公共仓库,每个人可以向公共仓库中提交自己的代码,也可以从公共仓库中更新其他人的最新提交。对大家来说,这个公共仓库就是一个远程仓库。
- 克隆(clone)
克隆就是复制一个已经存在的版本库。例如我们可以将公共版本库(远程仓库)克隆一份到自己的电脑上。
- 提交(commit)
将工作区中的代码合并到版本库中的操作就叫提交。每一次提交都会在版本库中留下一个记录,日后可以用其来进行对比、回退等操作。换句话说,处于工作区中但仍未提交的修改不会受到Git的保护,如果文件被删除了,或者改错了,将无法回退到之前的某个正确的状态(如果文本编辑器或IDE还没关的话说不定能弥补回这个错误)。
- 推送(push) vs 拉取(pull)
将工作区中的代码合并到本地仓库的操作叫做提交,而在版本库之间进行合并操作就不是提交了,叫做推送。因为对Git来说,两个版本库之间的关系是平等的,不存在谁“提交”给谁一说。
相应地,从另一个仓库中把代码合并到本地仓库的过程就叫拉取。
- 分支
每次提交是有先后关系的,正常来说,所有提交将会串成一条直线。而分支就是在原本的直线上分出去的岔路。一个分支从分出去的那一刻起,在其上的修改将完全独立于其他分支(除非你显式地将2个分支合并到一起)。
分支的演进过程很像物种的进化。物种在后代之间产生不同的变异,当一个群体中的变异积累到一定程度时,该群体很有可能有机会分化为一个新的物种,此后,新物种与原物种之间将平行进化。这个比喻只适用于演化出新分支的过程,但自然界中两个物种之间不太可能会合并(人工干预除外)。
6. 总结
好了,第一部分就先到这里。接下来我们将介绍Git中的常用操作,从而让你能够快速上手,敬请期待。如果你觉得本文对你有帮助,请帮忙点个赞!!