文本是写给新手的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. web项目中配置文件的加载顺序

    当一个项目启动时,首先是web.xml: 这里面的配置: 为什么要在web.xml中配置struts的过滤器? 因为一个web项目运行的时需要加载的,或者默认的部分配置都会在web.xml中配置,中间 ...

  2. R语言 神经网络算法

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  3. Git3:Git分支

    目录 一.概念 二.创建与合并分支 1.创建分支原理分析 2.创建分支语法 三.解决冲突 四.分支管理策略 1.保留分支历史 2.分支管理原则 五. bug分支 六.推送和拉取远程分支 一.概念 分支 ...

  4. android listview使用自定义的adapter没有了OnItemClickListener事件解决办法

    在使用listview的时用使用自定义的adapter的时候,如果你的item布局中包含有Button,Checkable继承来的所有控件,那么你将无法获取listview的onItemClickLi ...

  5. java内存溢出xms xmx

    java内存堆栈不够用时我们会寻求java参数-Xms和-Xmx的帮助,网上也有许多前辈给出了例子,但很多人喜欢把-Xms和-Xmx的值设置成一样的,甚至我还见过有吧-Xms设的比-Xmx还要大(-X ...

  6. isscroll插件 实现下拉加载 上啦刷新 转

    http://www.jb51.net/article/98394.htm 下面是别人的代码 <!DOCTYPE html> <html> <head> <m ...

  7. 脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest

    题目链接:http://codeforces.com/gym/101350/problem/E 题目大意:给你一个长度为n的方格,方格上面都被染色成了白色.每次染色都是选择白色的,假设目前选择的这块白 ...

  8. Java并发编程原理与实战三十六:阻塞队列&消息队列

    一.阻塞队列 1.阻塞队列BlockingQueue ---->可以理解成生产者消费者的模式---->消费者要等待到生产者生产出来产品.---->而非阻塞队列ConcurrentLi ...

  9. Java并发编程原理与实战四:线程如何中断

    如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程. java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们 ...

  10. MongoDB - Introduction to MongoDB, Databases and Collections

    MongoDB stores BSON documents, i.e. data records, in collections; the collections in databases. Data ...