1、Git起步

 

一、关于版本控制html

版本控制系统:版本控制是一种记录一个或若干文件内容变化,以便未来查阅特定版本修订状况的系统。但实际上,你能够对任何类型的文件进行版本控制。git

1.1 本地版本控制系统github

许多人习惯用复制整个项目目录的方式来保存不一样的版本,或许还会更名加上备份时间以示区别。这么作惟一的好处就是简单,可是特别容易犯错。有时候会混淆所在的工做目录,一不当心会写错文件或者覆盖意想外的文件。shell

1.2 集中化的版本控制系统数据库

集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS):有一个单一的集中管理的服务器,保存全部文件的修订版本,而协同工做的人们都经过客户端连到这台服务器,取出最新的文件或者提交更新。windows

 

这种作法带来了许多好处,特别是相较于老式的本地 VCS 来讲。如今,每一个人均可以在必定程度上看到项目中的其余人正在作些什么。而管理员也能够轻松掌控每一个开发者的权限,而且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。缓存

事分两面,有好有坏。这么作最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都没法提交更新,也就没法协同工做。若是中心数据库所在的磁盘发生损坏,又没有作恰当备份,毫无疑问你将丢失全部数据——包括项目的整个变动历史,只剩下人们在各自机器上保留的单独快照。本地版本控制系统也存在相似问题,只要整个项目的历史记录被保存在单一位置,就有丢失全部历史更新记录的风险。安全

1.3 分布式版本控制系统服务器

分布式版本控制系统(Distributed Version Control System,简称 DVCS):客户端并不仅提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工做用的服务器发生故障,过后均可以用任何一个镜像出来的本地仓库恢复。由于每一次的克隆操做,实际上都是一次对代码仓库的完整备份。网络

二、Git简史

Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工做都花在了提交补丁和保存归档的繁杂事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合做关系结束,他们收回了 Linux 内核社区无偿使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linux Torvalds)基于使用BitKcheper 时的经验教训,开发出本身的版本系统。他们对新的系统制订了若干目标:
• 速度
• 简单的设计
• 对非线性开发模式的强力支持(容许成千上万个并行开发的分支)
• 彻底分布式
• 有能力高效管理相似 Linux 内核同样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着使人难以置信的非线性分支管理系统(参见 Git 分支)。

三、Git基础

3.1 与其余版本控制系统的差异

直接记录快照,而非差别比较

Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差异在于 Git 对待数据的方法。概念上来区分,其它大部分系统以文件变动列表的方式存储信息。这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看做是一组基本文件和每一个文件随时间逐步累积的差别。

 

Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看做是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的所有文件制做一个快照并保存这个快照的索引。为了高效,若是文件没有修改,Git 再也不从新存储该文件,而是只保留一个连接指向以前存储的文件。Git 对待数据更像是一个 快照流。

Git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不仅是一个简单的 VCS。
 3.2 操做方式上的差异

近乎全部操做都是本地执行

在 Git 中的绝大多数操做都只须要访问本地文件和资源,通常不须要来自网络上其它计算机的信息。

3.3 完整性

Git 保证完整性

Git 中全部数据在存储前都计算校验和,而后以校验和来引用。

Git 用以计算校验和的机制叫作 SHA-1 散列(hash,哈希)。这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373

实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

3.4 Git 通常只添加数据

执行的 Git 操做,几乎只往 Git 数据库中增长数据。很难让 Git 执行任何不可逆操做,或者让它以任何方式清除数据。同别的 VCS 同样,未提交更新时有可能丢失或弄乱修改的内容;可是一旦你提交快照到 Git 中,就难以再丢失数据,特别是若是你按期的推送数据库到其它仓库的话。

3.5 三种状态

Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。

已提交表示数据已经安全的保存在本地数据库中。

已修改表示修改了文件,但还没保存到数据库中。

已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。
由此引入 Git 项目的三个工做区域的概念:Git 仓库、工做目录以及暂存区域。

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工做目录是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,通常在 Git 仓库目录中。有时候也被称做`‘索引’',不过通常说法仍是叫暂存区域。

基本的 Git 工做流程以下:
1. 在工做目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

若是 Git 目录中保存着的特定版本文件,就属于已提交状态。若是做了修改并已放入暂存区域,就属于已暂存状态。若是自上次取出后,做了修改但尚未放到暂存区域,就是已修改状态。

(如何根据文件状态实施后续操做,以及怎样跳过暂存直接提交)

四、命令行

Git 有多种使用方式。你可使用原生的命令行模式,也可使用 GUI 模式,咱们将使用命令行模式。这是由于首先,只有在命令行模式下你才能执行 Git 的 全部 命令,而大多数的 GUI 软件只实现了 Git 全部功能的一个子集以下降操做难度。

若是你学会了在命令行下如何操做,那么你在操做 GUI软件时应该也不会遇到什么困难,可是,反之则不成立。此外,因为每一个人的想法与侧重点不一样,不一样的人经常会安装不一样的 GUI 软件,但 全部人必定会有命令行工具。

五、安装Git

5.1 在 Linux 上安装

若是你想在 Linux 上用二进制安装程序来安装 Git,可使用发行版包含的基础软件包管理工具来安装。

若是以Fedora 上为例,你可使用 yum: # sudo yum install git
若是你在基于 Debian 的发行版上,请尝试用 apt-get:  # sudo apt-get install git

5.2 在 Mac 上安装

最简单的方法是安装 Xcode Command Line Tools。Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令便可。若是没有安装过命令行开发者工具,将会提示你安装。

若是你想安装更新的版本,可使用二进制安装程序。官方维护的 OSX Git 安装程序能够在 Git 官方网站下载,网址为 http://git-scm.com/download/mac。

 

也能够将它做为 GitHub for Mac 的一部分来安装。它们的图形化 Git 工具备一个安装命令行工具的选项。你能够从 GitHub for Mac 网站下载该工具,网址为 http://mac.github.com。

5.3 在 Windows 上安装

在 Windows 上安装 Git 也有几种安装方法。官方版本能够在 Git 官方网站下载。打开 http://git-scm.com/download/win,下载会自动开始。要注意这是一个名为 Git for Windows的项目(也叫作
msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。
另外一个简单的方法是安装 GitHub for Windows。该安装程序包含图形化和命令行版本的 Git。它也能支持Powershell,提供了稳定的凭证缓存和健全的 CRLF 设置。稍后咱们会对这方面有更多了解,如今只要一句话就够了,这些都是你所须要的。你能够在 GitHub for Windows 网站下载,网址为 http://windows.github.com。

5.4 从源代码安装

想从源码安装 Git,须要安装 Git 依赖的库:curl、zlib、openssl、expat,还有libiconv。

若是你的系统上有 yum (如 Fedora)或者 apt-get(如基于 Debian 的系统),可使用如下命令之一来安装最小化的依赖包来编译和安装 Git 的二进制版:
  # sudo yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel
  # sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext  libz-dev libssl-dev
为了可以添加更多格式的文档(如 doc, html, info),你须要安装如下的依赖包:
 # sudo yum install asciidoc xmlto docbook2x
  # sudo apt-get install asciidoc xmlto docbook2x
当你安装好全部的必要依赖,你能够继续从几个地方来取得最新发布版本的 tar 包。

你能够从 Kernel.org 网站获取,网址为 https://www.kernel.org/pub/software/scm/git,或从 GitHub 网站上的镜像来得到,网址为https://github.com/git/git/releases。

一般在 GitHub 上的是最新版本,但 kernel.org 上包含有文件下载签名,若是你想验证下载正确性的话会用到。
接着,编译并安装:
 # tar -zxf git-2.0.0.tar.gz
 # cd git-2.0.0
 # make configure
 # ./configure --prefix=/usr
 # make all doc info
 # sudo make install install-doc install-html install-info
完成后,你可使用 Git 来获取 Git 的升级:
 # git clone git://git.kernel.org/pub/scm/git/git.git

六、初次运行 Git 前的配置

6.1 配置文件

定制你的 Git 环境,每台计算机上只须要配置一次,程序升级时会保留配置信息。你能够在任什么时候候再次经过运行命令来修改它们。

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。这些变量存储在三个不一样的位置:
1. /etc/gitconfig 文件: 包含系统上每个用户及他们仓库的通用配置。 若是使用带有 --system 选项的git config 时,它会今后文件读写配置变量。
2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 能够传递 --global 选项让 Git读写此文件。
3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
每个级别覆盖上一级别的配置,因此 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
在 Windows 系统中,Git 会查找 $HOME 目录下(通常状况下是 C:\Users\$USER)的 .gitconfig 文件。

Git 一样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。

6.2 用户信息

安装完 Git 应该作的第一件事就是设置你的用户名称与邮件地址。这样作很重要,由于每个 Git 的提交都会使用这些信息,而且它会写入到你的每一次提交中,不可更改:
# git config --global user.name "John Doe"
# git config --global user.email johndoe@example.com

再次强调,若是使用了 --global 选项,那么该命令只须要运行一次,由于以后不管你在该系统上作任何事情, Git 都会使用那些信息。

当你想针对特定项目使用不一样的用户名称与邮件地址时,能够在那个项目目录下运行没有 --global 选项的命令来配置。
不少 GUI 工具都会在第一次运行时帮助你配置这些信息。

6.3 文本编辑器

配置默认文本编辑器:当 Git 须要你输入信息时会调用它。若是未配置,Git 会使用操做系统默认的文本编辑器,一般是 Vim。若是你想使用不一样的文本编辑器,例如 Emacs,

能够这样作:# git config --global core.editor emacs

6.4 检查配置信息

若是想要检查你的配置,可使用 git config --list 命令来列出全部 Git 当时能找到的配置。

可能会看到重复的变量名,由于 Git 会从不一样的文件中读取同一个配置(例如:/etc/gitconfig 与~/.gitconfig)。这种状况下,Git 会使用它找到的每个变量的最后一个配置。
你能够经过输入 git config <key>: 来检查 Git 的某一项配置

6.5 获取帮助

若你使用 Git 时须要获取帮助,有三种方法能够找到 Git 命令的使用手册:# git help <verb># git <verb> --help# man git-<verb>例如,要想得到 config 命令的手册,执行# git help config

相关文章
相关标签/搜索