Git简明教程一、基本概念
文本是写给新手的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中的常用操作,从而让你能够快速上手,敬请期待。如果你觉得本文对你有帮助,请帮忙点个赞!!
Git简明教程一、基本概念的更多相关文章
- Git使用教程一
Git是一个分布式版本控制系统,简单的说其就是一个软件,用于记录一个或若 干文件内容变化,以便将来查阅特定版本修订情况的软件. Github (https://www.github.com) 是-一个 ...
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 【转】git - 简明指南
git - 简明指南 助你入门 git 的简明指南,木有高深内容 ;) 作者:罗杰·杜德勒 感谢:@tfnico, @fhd 和 Namics其他语言 english, deutsch, españo ...
- NGUI系列教程一
NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...
- Git简明教程二、开始进行版本管理
上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...
- Quartz教程一:使用quartz
原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...
- redis学习教程一《Redis的安装和配置》
redis学习教程一<Redis的安装和配置> Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执 ...
- Cobalt Strike使用教程一
Cobalt Strike使用教程一 0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...
- git 教程一
git 是一个开源的分布式版本控件系统,用于敏捷高效地处理任何或小或大的项目. Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件. Git 与常用 ...
随机推荐
- SPSS数据类型:测量字段、角色字段
一:测量字段 • 默认值.具有未知存储类型和值的数据(例如,由于其尚未被读取)将显示为<默认值>. • 连续.用于描述整数.实数或日期/时间等数字值,如范围 0 - 100 或 0.75 ...
- R读取excel文件
2017.09.05 我一个下午的成果啊啊啊啊,看看失败 不禁感叹一声,失败的路真是多啊!!!! 一.安装xlsx包 下面具体讲一讲怎么弄的(太笨了,所以学得慢,需要一步一步的来) 用R读取excel ...
- qsort和sort
sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件: qsort()是C中的排序函数,其头文件为:#include<stdlib.h> ...
- 802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
Beacon帧:Beacon的实际发送一般都是采用最低速率的,其包含两个原因,1)beacon帧是一个广播帧,其没有ACK反馈,所以无法设置重传机制,2)beacon帧目的是广播AP的基本信息,所以希 ...
- python3 安装MySQLdb及无法打开mysql.h问题解决(win7 )
在Flask中要连接mysql数据库,需要安装flask-mysqldb. pip install flask-mysqldb 用pip安装MySQLdb 中遇到如下问题,折腾半天之久,多方尝试,终搞 ...
- Go_12:Go命令行处理
概述 常用的命令行参数解析有 2 种方式,一种是不带参数标签直接接上参数值,另外一种就是带有标签的参数解析.第一种我们可以直接通过 os 包提供的原始方法获取,第二种我们需要通过 flag 包来解析获 ...
- wsimport生成客户端 指定编码格式
wsimport -encoding utf- -keep -s D:\temp -p com.lawyer.user -verbose http://服务地址?wsdl -encoding : 指定 ...
- vscode nodejs智能提示功能
1.依赖一些第三方的插件,先安装typings这个包,如果使用的是淘宝镜像,输入cnpm.cmd执行: cnpm i typings -g //cnpm install typings -global ...
- idea 常用快捷使用
一.智能提示 1.快速移动到错误代码 :Shift+F2 或者 f2/ 2.快速修复:Alt+Enter 3.快速生成括号:Ctrl+Shift+Enter 二.重构 1.重构功能汇总:Ctrl+Sh ...
- jQuery中下拉框select的操作方法详解
最近在写页面的时候常常遇到要动态增删改下拉框select的情况,由于我比较习惯用jquery框架来架构我的前端js,所以就顺便把各种jquery操作下拉框select的方法总结了一下,收藏起来以便下次 ...