2.Git
自诞生于2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目
标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统
(见第三章),可以应付各种复杂的项目开发需求。
直接快照,而非比较差异
Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而
大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar
等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记
录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件
作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再
次保存,而只对上次保存的快照作一连接
近乎所有操作都可本地执行
在Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用CVCS 的
话,差不多所有操作都需要连接网络。因为Git 在本地磁盘上就保存着所有有关当前项目
的历史更新,所以处理起来速度飞快。
举个例子,如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回
来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。
如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和
当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本
地来作比较。
时刻保持数据完整性
在保存到Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作
为数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。
这项特性作为Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完
整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。
Git 使用SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个
SHA-1 哈希值,作为指纹字符串。该字串由40 个十六进制字符(0-9 及a-f)组成
Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保
存在Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
多数操作仅添加数据
常用的Git 操作大多仅仅是把数据添加到数据库。因为任何一种不可逆的操作,比如删
除数据,要回退或重现都会非常困难。在别的VCS 中,若还未提交更新,就有可能丢失或
者混淆一些修改的内容,但在Git 里,一旦提交快照之后就完全不用担心丢失数据,特别
是在养成了定期推送至其他镜像仓库的习惯的话。
三种状态
对于任何一个文件,在Git 内都只有三
种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该
文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保
存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作
目录以及暂存区域。
每个项目都有一个git 目录,它是Git 用来保存元数据和对象数据库的地方。该目录非
常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件
实际上都是从git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对
这些文件进行编辑。
所谓的暂存区域只不过是个简单的文件,一般都放在git 目录中。有时候人们会把这个
文件叫做索引文件,不过标准说法还是叫暂存区域。
基本的Git 工作流程如下所示:
1. 在工作目录中修改某些文件。
2. 对这些修改了的文件作快照,并保存到暂存区域。
3. 提交更新,将保存在暂存区域的文件快照转储到git 目录中。
所以,我们可以从文件所处的位置来判断状态:如果是git 目录中保存着的特定版本文
件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次
取出后,作了修改但还没有放到暂存区域,就是已修改状态。
安装Git
主要有两
种,一种是通过编译源代码来安装;另一种是使用为特定平台预编译好的安装包。
从源代码安装
Git 的工作需要调用curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先
安装这些依赖工具。
之后,从下面的Git 官方站点下载最新版本源代码:
http://git-scm.com/download
然后编译并安装:
现在已经可以用git 命令了,用git 把Git 项目仓库克隆到本地,以便日后随时更新:
$ git clone git://git.kernel.org/pub/scm/git/git.git
在Windows 上安装
在Windows 上安装Git 同样轻松,有个叫做msysGit 的项目提供了安装包,可以从
Google Code 的页面上下载安装文件(.exe):
http://code.google.com/p/msysgit
完成安装之后,就可以使用命令行的git 工具(已经自带了ssh 客户端)了,另外还有
一个图形界面的Git 项目管理工具。
初次运行Git 前的配置
一般在新的系统上,我们都需要先配置下自己的Git 工作环境。配置工作只需一次,以
后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配
置。
Git 提供了一个叫做git config 的工具
专门用来配置或读取相应的工作环境变量。而正
是由这些环境变量,决定了Git 在各个环节的具体工作方式和行为。这些变量可以存放在
以下三个不同的地方:
• /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config 时
用--system 选项,读写的就是这个文件。
• ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用git config 时
用--global 选项,读写的就是这个文件。
• 当前项目的git 目录中的配置文件(也就是工作目录中的.git/config 文件):这
里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以
.git/config 里的配置会覆盖/etc/gitconfig 中的同名变量。
在Windows 系统上,Git 会找寻用户主目录下的.gitconfig 文件。主目录即$HOME 变量
指定的目录,一般都是C:\Documents and Settings\$USER。此外,Git 还会尝试找寻/
etc/gitconfig 文件,只不过看当初Git 装在什么目录,就以此作为根目录来定位。
用户信息
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次Git 提
交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记
录
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
如果用了--global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你
所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或
者电邮,只要去掉--global 选项重新配置即可,新的设定保存在当前项目的.git/config
文件里。
文本编辑器
接下来要设置的是默认使用的文本编辑器。Git 需要你输入一些额外消息的时候,会自动
调用一个外部文本编辑器给你用。默认会使用操作系统指定的默认编辑器,一般可能会是
Vi 或者Vim。
$ git config --global core.editor emacs
差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用vimdiff
的话:
$ git config --global merge.tool vimdiff
查看配置信息
要检查已有的配置信息,可以使用git config --list 命令
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如/etc/gitconfig
和~/.gitconfig),不过最终Git 实际采用的是最后一个。
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
$ git config user.name
获取帮助
想了解Git 的各式工具该怎么用,可以阅读它们的使用帮助,方法有三:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
相关推荐
git简介及基本操作git简介及基本操作git简介及基本操作git简介及基本操作git简介及基本操作
【微信小程序开发-Git简介】 在微信小程序的开发过程中,版本控制工具的使用至关重要,而Git是最常用的版本控制系统之一。Git不仅能够帮助开发者追踪代码的变化,还支持多人协作,使得团队开发变得更加高效和有序。...
### Git简介及常用操作知识点详解 #### 一、Git与版本控制基础 1. **版本控制的概念** - 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 - **重要性**: - **备份**:确保...
Git简介和环境搭建【Git和GitHub教程1】
Git的常用操作包括:初始化仓库(`git init`)、克隆仓库(`git clone`)、添加文件到暂存区(`git add`)、提交(`git commit`)、查看提交历史(`git log`)、分支管理(`git branch`)、合并分支(`git merge`)、解决冲突(`git...
Git&GitHub_Git简史.avi
Git 知识总结 Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。官网地址为:...
Git 是一款强大的分布式版本控制系统,由 Linux 内核开发者 Linus Torvalds 创建,旨在提高 Linux 内核的开发效率。与传统的集中式版本控制系统如 CVS 和 Subversion 不同,Git 不依赖单一的中央服务器,每个开发者...
Git是一个由Linux内核开发者Linus Torvalds创建的分布式版本控制系统,它的设计目标是高效、灵活,并且特别适合大规模的协作开发。Git的核心特性在于它完全分布式的特点,这意味着每个开发者的本地副本都是一个完整...
#### 一、Git简介 - **版本控制基本概念** - 版本控制系统(Version Control System, VCS):类似于银行柜台的“会计”,负责跟踪和记录文件的变化。 - **重要性**:提高工作协作效率,甚至决定项目的成败。 - *...
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git的基本操作通常涉及环境配置、仓库创建、文件添加与提交等步骤。
Git简介 Git是什么? Git是⺫⽬目前世界上最先进的分布式版本控制系统(没有之⼀一)。 Git有什么特点?简单来说就是:⾼高端⼤大⽓气上档次! 那什么是版本控制系统? 如果你⽤用Microsoft Word写过⻓长篇⼤大论,...
**一、Git简介** Git由Linus Torvalds于2005年创建,初衷是为了管理Linux内核的开发。它具有速度快、数据完整性高、分支管理灵活等优点。Git采用分布式模型,每个开发者的本地机器上都有完整的代码库副本,可以独立...
#### 一、Git简介与特性 **Git** 是一款开源的分布式版本控制系统,用于高效地处理从小型到大型项目的版本管理。相比于传统的集中式版本控制系统如SVN,Git具备以下特点: 1. **分布式**:每一个开发者的电脑上都...
#### Git 简介 Git 是一款功能强大、高效且开源的分布式版本控制系统。自推出以来,Git 因其灵活性和速度,在开源和协作编程社区迅速取代了传统的版本控制系统如 SVN、CVS 和 Perforce。 **版本控制系统**是一种...
#### 一、Git简介 - **Git是什么**:Git是一款目前世界上最先进的分布式版本控制系统。它被设计用于高效处理从小型到大型项目的版本控制,尤其适合软件开发项目。 - **Git的特点**:Git具有高效、安全、灵活等特点...
#### 一、Git简介与版本控制系统概念 **Git** 是一款全球范围内使用最为广泛且先进的分布式版本控制系统。它能够自动记录每次文件的改动情况,包括文件的添加、修改以及删除等操作。对于软件开发团队而言,这种能力...
希腊语Git简介 TL; DR 我们一开始就运行一次: git clone https://github.com/username/repository.git cd repository git remote add upstream https://github.com/maellak/repository.git 每次进行更改时应...