Git 学习笔记:1 起步

关于版本控制

什么是版本控制?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定修订情况的系统。

本地版本控制

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

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多数都是采用某种简单的数据库来记录文件的历次更新差异。

其中最流行的一种叫做RCS,现今许多计算机系统上面都还看得到它的身影。甚至在流行的Mac OS X系统上安装了开发者工具包之后,也可以使用rcs命令。它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统

接下来人们又遇到了一个问题,如何让在不同系统上的开发者协同工作呢?于是,集中化的版本控制系统(简称 CVCS)应运而生。这类系统,诸如CVS、Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来许多好处,特别是相较于老式的本地VCS来说,现在,每个人都可以在一定程度上看到项目中的其他人正在做什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个CVCS 要远比在各个客户端上维护本地数据库来得轻松。

事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一个小时,那么在这一小时内,谁都无法协同工作。如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有的数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

分布式版本控制系统

于是分布式版本控制系统(简称DVCS)面世了。在这类系统中,像GIt、Mercurial、Bazaar 以及 Darcs等,客户端并不只是提取最新版本的快照,而是把代码仓库额安正地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,时候都可以用任何一个镜像出来的本地仓库来恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

Git 简史

同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linux 内核开源项目有着为数众多的参与者。绝大多数的 Linux内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到2002年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。

到了2005年,开发BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们回收了 Linux内核社区免费试用 BitKeeper的权利。这就迫使 Linux 开源社区基于试用 BitKeeper 是的经验教训,开发出自己的版本系统。他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力搞笑管理类似 Linux 内核一样的超大规模项目(速度和数量)

自诞生于2005年以来,Git日臻成熟和完善,在高度仪用的同事,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

Git 基础

那么,简单地说,Git究竟是怎样的一个系统呢?

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

Git 和 其它版本控制系统的而主要差别在于Git 对待数据的方法。概念上来区分,其它大部分西永以文件变更列表的方式存储信息。这类系统将它们保存的信息看做是一组基本文件随时间逐步累积的差异。

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

近乎所有操作都是本地执行

在Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。如果你习惯于所有操作都有额昂罗谈事开销的集中式版本控制系统,Git 在这方面会让你感到速度之神赐给了 Git 超凡的能量。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

Git 保证完整性

Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git 不知情时更改任何文件内容或目录内容。这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。若你在传送过程中丢失信息或者损坏文件,Git 就能发现。

Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。这是一个有40个十六进制字符组成的字符串,基于Git 中文件的内容或目录结构计算出来。

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

Git 一般只添加数据

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

三种状态

Git 有三种状态,你的文件可能处于其中之一:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示数据已经安全的保存在本地数据库中。已修改表示修改了文件,但还没保存到数据库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入 Git 项目的单个工作区域的概念:Git 仓库、工作目录以及暂存区域

在这里插入图片描述

Git 仓库目录是Git 用来保存项目的元数据和对象数据库的地方。这是Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。这些从Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或者修改。

暂存区域 是一个文件,保存了下次将提交的文件列表信息,一般在Git 仓库目录中。有时候也称作 “索引”,不过一般说法还是叫暂存区域。

基本的Git 流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久存储到Git 仓库目录

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

安装 Git

在Linux 上安装

如果你现在Linux 上用二进制安装程序来安装Git,可以使用发行版包含的基础包管理工具来安装。

Fedora上,可以使用yum:

  $ sudo yum install git

基于Debian的发行版上,请尝试用apt-get:

 $ sudo apt-get install git

要了解更多选择,Git 官方网站上有在各种Unix 风格的系统上安装步骤, http://git-scm.com/download/linux。

在Mac上安装

在Mac 上安装Git 有多种方式。最简单的方式是安装Xcode Command 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。

在 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

从源码安装

有人觉得从源码安装Git 更加实用,因为你能得到最新的版本。二进制安装程序倾向于有一些滞后,当然近几年Git 已经成熟,这个差异不在显著。

如果你想从源码安装Git ,需要安装Git 依赖的库:curl、zlib、openssl、expat、还有libiconv 等。 如果你的系统上有yum或者apt-get,可以使用一下命令之一来安装最小化的依赖包来编译和安装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

当你安装好所有的必要依赖,你可以继续从几个地方来为 https://www.kernel.org/pub/software/scm/git,或从 GitHub 网站上的镜像来获得,网址为 https://github.com/git/git/releases。 取得最新发布版版本的tar包。你可以从Kernal.org网址获取,网址为 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 前的配置

既然已经在系统上安装了Git ,你会想要做几件事开定制你的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 应该做的第一件事就是设置你的用户名称与邮件地址。这样做很重要,因为每一个Git 的提交都会使用这些信息,并且它会写入到的你的每一次提交中,不可更改:

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

再次强调,如果使用了 --gobal 选项,那么该命令只需要运行一次,因为在之后无论你在该系统上做任何事情,Git 都会使用那些信息。当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 – global 选项的命令来配置。

文本编辑器

既然用户信息已经设置完毕,你可以配置默认文本编辑器了,当Git 需要你输入信息时会调用它。如果未配置,Git 或使用操作系统默认的文本编辑器,通常是Vim。如果你想使用不同的文本编辑器,例如Emacs,可以这样做:

$ git config --global core.editor emacs

注意:Vim 和 Emacs 是像Linux 与 Mac 等 基于Unix 的系统上开发者经常使用的流行的文本编辑器。如果你对这些编辑器都不是很了解或者你使用的是Windows 系统,那么可能西药搜索如何在Git 中配置你最常用的编辑器。如果你不设置编辑器并且不知道 Vim 或 Emacs 是什么,当它们运行起来后你可能会被弄糊涂、不知所措。

检查配置信息

如果想要检查你的配置,可以使用 git config --list 命令来列出所有的 Git 当时能找到的配置。

$ git config --list
user.name=John Doe
[email protected]
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

你可能或看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig 与 ~/.gitconfig)。这种情况下,Git 会使用它找到的每一个变量的最后一个配置。

你可以通过输入 git config <key> :来检查Git的某一项的配置

$ git config user.name
John Doe

获取帮助

若你使用 Git 时需要获取帮助,有三种方法可以找到Git 命令的使用手册:

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

例如,要获得 config 命令的手册,执行

$ git help config

这些命令很棒,以为内你随时随地可以使用而无需联网。如果你觉得手册或者本书的内容还不够用,你可以尝试在Freenode IRC 服务器 (irc.freenode.net)的#git 或#github 频道寻求帮助。这些频道经常有上百人在线,他们都精通 Git 并且乐于助人。

猜你喜欢

转载自blog.csdn.net/weixin_44626569/article/details/88539038
今日推荐