版本控制是什么

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

    如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

本地版本控制系统

  • 为了解决在工作中常常出现的写错文件或者意外覆盖不该覆盖的文件,人们很早就开发了许多本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。但接下来又出现了新的问题,如何让在不同系统的不同开发者协同工作呢?

集中化的版本控制系统(CVCS)

  • 为了解决协同办公问题,集中化的版本控制系统诞生了,诸如CVS、SVN等,都有一个集中管理的服务器保存所有文件的修订版本。所有的代码都由中央仓库集中管理,每个开发者都使用同一个中央仓库进行开发,这样一来,每个人都可以看到其他人正在做些什么,而管理员也可以轻松地掌控每个开发者的权限,并且管理一个服务器也比管理各个客户端上的数据库更加轻松容易。但是,也有着一个显而易见的缺点,因为必须依靠网络连接来提交和获取代码,因此没有网络时则无法进行版本控制操作。如果服务器发生故障,那么这段时间里谁也无法更新提交,而若中心数据库的磁盘发生故障,而有没有做好备份,那么就会丢失所有数据。

    centralized

分布式版本控制系统(DVCS)

  • 为了避免文件因为中心数据库的损坏而完全丢失的问题,分布式版本控制系统诞生了,客户端不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来,每个开发者都可以在本地拥有完整的代码仓库副本。这样一来,客户端可以在没有网络的情况下进行代码修改和版本控制,同时也避免了数据丢失的问题。

    distributed

Git是什么

  • Git和其他版本控制系统有着一定的差别,尽管有着相同的目的,实现方式却是截然不同的。

基于差异的版本控制

  • CVS、SVN等系统的你工作方式是基于变更集的,以文件变更列表的方式存储信息,每次提交只记录具有差异的内容,因此一组文件的存储信息则是每个文件随时间逐步积累的差异。

    deltas

基于快照的版本控制

  • 与其他的版本控制系统不同的是,Git 更像是把数据看作是对小型文件系统的一系列快照。在Git中,每次提交更新或者保存项目状态时,就会对现在的全部文件创建一个快照并保存这个快照的索引,对于没有修改的文件,则是保留一个链接指向之前存储的文件。

    snapshots

  • 在使用体验上,Git相较其他版本控制系统有着更好的性能,由于本地存储于快照机制,速度通常更快,同时Git也有着较为强大的分支处理机制,与较为复杂的SVN相比更加灵活与简便。

Git的安装

  1. 进入Git下载页面,或者进入国内镜像源,选择安装包文件下载

  2. 使用安装包安装Git

  3. 打开控制台(命令提示符),输入以下内容,若显示Git的版本号则安装成功

    1
    git --version

使用Homebrew安装

  1. 打开终端应用程序(Terminal)

  2. 输入以下指令安装HomeBrew

    1
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. 输入以下指令安装Git

    1
    brew install git
  4. 验证Git是否安装成功,若显示Git的版本号,则安装成功

    1
    git --version

使用Xcode Command Line Tools安装

  1. 打开终端应用程序(Terminal)

  2. 输入以下指令安装Xcode Command Line Tools

    1
    xcode-select --install
  3. 验证Git是否安装成功,若显示Git的版本号,则安装成功

    1
    git --version

作为GitHub for macOS的一部分来安装

在安装软件时,提供了安装命令行工具的选项,可以从GitHub for macOS网站下载该安装包。

Debian/Ubuntu 使用以下指令

1
apt-get install git

CentOS 使用以下指令

1
yum install git

安装完成后,检查是否安装成功

1
git --version

运行Git前的配置

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)
  2. ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。
  3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER )的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。 如果你在 Windows 上使用 Git 2.x 以后的版本,那么还有一个系统级的配置文件,Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ,Windows Vista 及其以后的版本在 C:\ProgramData\Git\config 。此文件只能以管理员权限通过 git config -f <file> 来修改。

你可以通过以下命令查看所有的配置以及它们所在的文件:

1
git config --list --show-origin
  • 配置Git的相关内容通常使用的是Git Bash,可以在windows菜单中找到,或者在任意目录下右击鼠标,选择Open Git Bash here打开。如果配置好了Git的环境变量,那么也可以直接在命令行中输入(判断是否可用最简单的办法是在命令行中输入git --version查看是否显示版本号)。

用户信息

  • 安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中。

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

    1
    2
    git config --global user.name "你的用户名"
    git config --global user.email 你的邮箱

文本编辑器

  • 当 Git 需要输入信息时会调用文本编辑器。 如果未配置,Git 会使用操作系统默认的文本编辑器。在 Windows 系统上,如果你想要使用别的文本编辑器,那么必须指定可执行文件的完整路径,它可能随你的编辑器的打包方式而不同。如果你想使用不同的文本编辑器,例如 Emacs,可以这样做:

    1
    git config --global core.editor emacs

    对于 Notepad++,一个流行的代码编辑器来说,你可能想要使用 32 位的版本, 因为在本书编写时 64 位的版本尚不支持所有的插件。 如果你在使用 32 位的 Windows 系统,或在 64 位系统上使用 64 位的编辑器,那么你需要输入如下命令:

    1
    $ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

查看配置信息

  • 需要检查已有的配置信息时,可以使用如下命令。有时会看到重复的变量名,分别来自不同的配置文件,最终Git实际使用的是最后一条。

    1
    git config --list
  • 也可以直接查阅某个环境变量的设定值,例如使用下面的命令查询配置的用户名和邮箱。

    1
    2
    git config user.name
    git config user.email

获取帮助

  • 如果需要获取Git指令的帮助,可以使用如下三种指令:

    1
    2
    3
    git help <verb>
    git <verb> --help
    man git-<verb>
  • 例如,想要查看git config的手册,可以输入:

    1
    git help config