文本是写给新手的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版本的程序:

http://git-scm.com/download/

在Windows下,另一个常用的是msysgit:

http://msysgit.github.io/

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中使用initclone创建一个新的版本库后,就会在当前目录下生成一个.git目录,这个就是Git的版本库,其中保存着本项目的各文件数据、提交记录、分支、配置等等数据。如果我们把.git目录删除的话,版本库也就丢失了。这一点和SVN不同,SVN会把相关数据分散到各个文件所在的目录中。

  • 工作区(Working Directory)

工作区就是版本仓库所在的目录,其中的文件处于Git版本库的管理之下。使用initclone创建一个新的版本库后,当前目录就成为了工作区。

  • 本地仓库 vs 远程仓库

首先,本地仓库和远程仓库没有本质区别。在使用Git时,为了方便团队成员之间交换代码,通常会专门部署一台“服务器”作为公共仓库,每个人可以向公共仓库中提交自己的代码,也可以从公共仓库中更新其他人的最新提交。对大家来说,这个公共仓库就是一个远程仓库。

  • 克隆(clone)

克隆就是复制一个已经存在的版本库。例如我们可以将公共版本库(远程仓库)克隆一份到自己的电脑上。

  • 提交(commit)

将工作区中的代码合并到版本库中的操作就叫提交。每一次提交都会在版本库中留下一个记录,日后可以用其来进行对比、回退等操作。换句话说,处于工作区中但仍未提交的修改不会受到Git的保护,如果文件被删除了,或者改错了,将无法回退到之前的某个正确的状态(如果文本编辑器或IDE还没关的话说不定能弥补回这个错误)。

  • 推送(push) vs 拉取(pull)

将工作区中的代码合并到本地仓库的操作叫做提交,而在版本库之间进行合并操作就不是提交了,叫做推送。因为对Git来说,两个版本库之间的关系是平等的,不存在谁“提交”给谁一说。

相应地,从另一个仓库中把代码合并到本地仓库的过程就叫拉取。

  • 分支

每次提交是有先后关系的,正常来说,所有提交将会串成一条直线。而分支就是在原本的直线上分出去的岔路。一个分支从分出去的那一刻起,在其上的修改将完全独立于其他分支(除非你显式地将2个分支合并到一起)。

分支的演进过程很像物种的进化。物种在后代之间产生不同的变异,当一个群体中的变异积累到一定程度时,该群体很有可能有机会分化为一个新的物种,此后,新物种与原物种之间将平行进化。这个比喻只适用于演化出新分支的过程,但自然界中两个物种之间不太可能会合并(人工干预除外)。

6. 总结

好了,第一部分就先到这里。接下来我们将介绍Git中的常用操作,从而让你能够快速上手,敬请期待。如果你觉得本文对你有帮助,请帮忙点个赞!!

Git简明教程一、基本概念的更多相关文章

  1. Git使用教程一

    Git是一个分布式版本控制系统,简单的说其就是一个软件,用于记录一个或若 干文件内容变化,以便将来查阅特定版本修订情况的软件. Github (https://www.github.com) 是-一个 ...

  2. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. 【转】git - 简明指南

    git - 简明指南 助你入门 git 的简明指南,木有高深内容 ;) 作者:罗杰·杜德勒 感谢:@tfnico, @fhd 和 Namics其他语言 english, deutsch, españo ...

  4. NGUI系列教程一

    NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...

  5. Git简明教程二、开始进行版本管理

    上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...

  6. Quartz教程一:使用quartz

    原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...

  7. redis学习教程一《Redis的安装和配置》

    redis学习教程一<Redis的安装和配置> Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执 ...

  8. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

  9. git 教程一

    git 是一个开源的分布式版本控件系统,用于敏捷高效地处理任何或小或大的项目. Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件. Git 与常用 ...

随机推荐

  1. 【费用流】【网络流24题】【P4013】 数字梯形问题

    Description 给定一个由 \(n\) 行数字组成的数字梯形如下图所示. 梯形的第一行有 \(m\) 个数字.从梯形的顶部的 \(m\) 个数字开始,在每个数字处可以沿左下或右下方向移动,形成 ...

  2. 关于JavaScript诞生之初的趣事

    我在读很多优秀的JavaScript源码时候常常被它诡异的语法搞的精疲力尽,所以时不时的加固JavaScript基础知识是十分有必要的,这些知识每次温故或者你换个角度去思考都能收获颇多,那么如此深不可 ...

  3. golang interface 类型变量当作某个具体类型使用

    比如,我们定义了一个 struct type person struct { Name string `json:"name"` Age int `json:"age&q ...

  4. label和fieldset标签

    一.label标签 作用:可以通过for属性关联input标签的 id 属性,这样可以实现在点击label标签的内容时,可以使input文本框中获取输入的光标. <body> <la ...

  5. day12 继承

    设计原则:开闭原则:对于拓展open,对于修改close. 类与类的关系:1.is a(继承关系) 2.has a(组合关系) 继承的优点:1.代码的可重用性 2.父类的属性和方法用于子类 3.子类可 ...

  6. linq的语法和案例

    本篇逐一介绍linq各个关键字的用法(from,select,group,into等),本篇所有的案例都是用linqpad来完成的(官方地址:http://www.linqpad.net/),建议想学 ...

  7. vuejs2.0 vue实例的生命周期

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .下图展示的就是一个v ...

  8. ssh 批量执行命令

    # python3.5 + paramiko # pip 是python的包管理工具,在shell里执行如下命令安装paramoko模块 # pip install paramiko # import ...

  9. 把一个IEEE754浮点数转换为IBM370浮点数的C#代码

    把一个IEEE754浮点数转换为IBM370浮点数的C#代码. 在这个网页上有古老的IBM370浮点格式的说明. // http://en.wikipedia.org/wiki/IBM_Floatin ...

  10. APScheduler定时执行外加supervisor管理后台运行

    最近写的天气爬虫想要让它在后台每天定时执行,一开始用的celery,但不知道为什么明明设置cron在某个时间运行,但任务却不间断的运行.无奈转用apscheduler,但是不管怎么设置都不能使得当调用 ...