內容目录

上一个主题

1.3. 安装Git

下一个主题

1.3.2. Mac OS X下安装和使用Git

本页

1.3.1. Linux下安装和使用Git

Git诞生于Linux平台并做为版本控制系统帅先服务于Linux核心,因此在Linux安装Git是非常方便的。可以通过不同的方式在Linux上安装Git。一种方法是通过Linux发行版的包管理器安装已经编译好的二进制格式的Git软件包。另外一种方式就是从Git源码开始安装。

1.3.1.1. 包管理器方式安装

用Linux发行版的包管理器安装Git,最为简单,但安装的Git可能不是最新的版本。还有一点要注意,就是Git软件包在有的Linux发行版中可能不叫做git,而叫做git-core。这是因为在Git之前就有一款叫做GNU交互工具(GNU Interactive Tools)的GNU软件在有的Linux发行版(Deian lenny)中已经占用了git的名称。为了以示区分,作为版本控制系统的Git,其软件包在这些平台就被命名为git-core。不过因为作为版本控制系统的Git太有名了,最终导致在一些Linux发行版的最新版本中,将GNU Interactive Tools软件包由git改名为gnuit,将git-core改名为git。所以在下面介绍的在不同的Linux发行版中安装Git时,会看到有git和git-core两个不同的名称。

  • Ubuntu 10.10(maverick)或更新版本,Debian(squeeze)或更新版本:

    $ sudo aptitude install git
    $ sudo aptitude install git-doc git-svn git-email gitk
    

    其中git软件包包含了大部分Git命令,是必装的软件包。

    软件包git-svn、git-email、gitk本来也是Git软件包的一部分,但是因为有着不一样的软件包依赖(如更多perl模组,tk等),所以单独作为软件包发布。

    软件包git-doc则包含了Git的HTML格式文档,可以选择安装。如果安装了Git的HTML格式的文档,则可以通过执行git help -w <sub-command>命令,自动用 Web 浏览器打开相关子命令<sub-command>的HTML帮助。

  • Ubuntu 10.04(lucid)或更老版本,Debian(lenny)或更老版本:

    在老版本的Debian中,软件包git实际上是Gnu Interactive Tools,而非作为版本控制系统的Git。做为版本控制系统的Git在软件包git-core中。

    $ sudo aptitude install git-core
    $ sudo aptitude install git-doc git-svn git-email gitk
    
  • RHEL、Fedora、CentOS:

    $ yum install git
    $ yum install git-svn git-email gitk
    

其他发行版安装Git的过程和上面介绍的方法向类似。Git软件包在这些发行版里或称为git,或称为git-core。

1.3.1.2. 从源代码开始安装

访问Git的官方网站:http://git-scm.com/。下载Git源码包,例如:git-1.7.3.5.tar.bz2

  • 展开源码包,并进入到相应的目录中。

    $ tar -jxvf git-1.7.3.5.tar.bz2
    $ cd git-1.7.3.5/
    
  • 安装方法写在INSTALL文件当中,参照其中的指示完成安装。下面的命令将Git安装在/usr/local/bin中。

    $ make prefix=/usr/local all
    $ sudo make prefix=/usr/local install
    
  • 安装Git文档(可选)。

    编译的文档主要是HTML格式文档,方便通过git help -w <sub-command>命令查看。实际上即使不安装Git文档,也可以使用man手册查看Git帮助,使用命令git help <sub-command>或者git <sub-command> –help

    编译文档依赖asciidoc,因此需要先安装asciidoc(如果尚未安装的话),然后编译文档。在编译文档时要花费很多时间,要有耐心。

    $ make prefix=/usr/local doc info
    $ sudo make prefix=/usr/local \
      install-doc install-html install-info
    

安装完毕之后,就可以在/usr/local/bin下找到git命令。

1.3.1.3. 从Git版本库进行安装

如果在本地克隆一个Git版本库,就可以用版本库同步的方式获取最新版本的Git,这样在下载不同版本的Git源代码时实际上采用了增量方式,会非常的节省时间和空间。当然使用这种方法的前提是已经用其他方法安装好了Git。

  • 克隆Git版本库到本地。

    $ git clone git://git.kernel.org/pub/scm/git/git.git
    $ cd git
    
  • 如果本地已经克隆过一个Git版本库,直接在工作区中更新,以获得最新版本的Git。

    $ git pull
    
  • 执行清理工作,避免前一次编译的遗留文件造成影响。注意下面的操作将丢弃本地对Git代码的改动。

    $ git clean -fdx
    $ git reset --hard
    
  • 查看Git的里程碑,选择最新的版本进行安装。例如v1.7.3.5

    $ git tag
    ...
    v1.7.3.5
    
  • 检出该版本的代码。

    $ git checkout v1.7.3.5
    
  • 执行安装。例如安装到/usr/local目录下。

    $ make prefix=/usr/local all doc info
    $ sudo make prefix=/usr/local install \
      install-doc install-html install-info
    

我在撰写本书的过程中,就通过Git版本库的方式安装,在/opt/git目录下安装了多个不同版本的Git,以测试Git的兼容性。使用类似下面的脚本,可以批量安装不同版本的Git。

#!/bin/sh

for ver in      \
    v1.5.0      \
    v1.7.3.5    \
    v1.7.4-rc1  \
; do
    echo "Begin install Git $ver.";
    git reset --hard
    git clean -fdx
    git checkout $ver || exit 1
    make prefix=/opt/git/$ver all && \
    sudo make prefix=/opt/git/$ver install || exit 1
    echo "Installed Git $ver."
done

1.3.1.4. 命令补齐

Linux的shell环境(bash)通过bash-completion软件包提供命令补齐功能,能够实现在录入命令参数时按一下或两下TAB键,实现参数的自动补齐或提示。例如输入git com后按下TAB键,会自动补齐为git commit

通过包管理器方式安装Git,一般都已经为Git配置好了自动补齐,但是如果是以源码编译方式安装Git,就需要为命令补齐多做些工作。

  • 将Git源码包中的命令补齐脚本复制到bash-completion对应的目录中。

    $ cp contrib/completion/git-completion.bash \
         /etc/bash_completion.d/
    
  • 重新加载自动补齐脚本,使之在当前shell中生效。

    $ . /etc/bash_completion
    
  • 为了能够在终端开启时自动加载bash_completion脚本,需要在本地配置文件~/.bash_profile或全局文件/etc/bashrc文件中添加下面的内容。

    if [ -f /etc/bash_completion ]; then
      . /etc/bash_completion
    fi
    

1.3.1.5. 中文支持

Git的本地化做的并不完善,命令的输出以及命令的帮助还只能输出英文,也许在未来版本会使用gettext实现本地化,就像目前对git-gui命令所做的那样。

使用中文的用户最关心的问题还有:是否可以在提交说明中使用中文?是否可以使用中文文件名或者目录名?是否可以使用中文来命名分支或者里程碑?简单的说,可以在提交说明中使用中文,但是若使用非UTF-8字符集,则需要为Git做些设置。至于使用中文来命名文件、目录或引用,只有在使用UTF-8字符集的环境下才可以(Windows用户使用Cygwin),否则尽量避免使用。

UTF-8字符集

Linux平台的中文用户一般会使用utf-8字符集,Git在utf-8字符集下可以工作的非常好。

  • 在提交时,可以在提交说明中输入中文。
  • 显示提交历史,能够正常显示提交说明中的中文字符。
  • 可以添加中文文件名的文件,并可以在同样utf-8字符集的Linux环境中克隆及检出。
  • 可以创建带有中文字符的里程碑名称。

但是默认设置下,带有中文文件名的文件,在工作区状态输出、查看历史更改概要、以及在补丁文件中,文件名不能正确显示为中文,而是用若干8进制编码来显示中文,如下:

$ git status -s
?? "\350\257\264\346\230\216.txt"

通过设置变量core.quotepathfalse,就可以解决中文文件名在这些Git命令输出中的显示问题。

$ git config --global core.quotepath false
$ git status -s
?? 说明.txt

GBK字符集

但如果Linux平台采用非UTF-8字符集,例如用zh_CN.GBK字符集编码(某些Linux发行版),就要另外再做些工作了。

  • 设置提交说明显示所使用的字符集为gbk,这样使用git log查看提交说明才能够正确显示其中的中文。

    $ git config --global i18n.logOutputEncoding gbk
    
  • 设置录入提交说明时所使用的字符集,以便在commit对象中对字符集正确标注。

    Git在提交时并不会对提交说明进行从GBK字符集到UTF-8的转换,但是可以在提交说明中标注所使用的字符集,因此在非UTF-8字符集的平台录入中文,需要用下面指令设置录入提交说明的字符集,以便在commit对象中嵌入正确的编码说明。

    $ git config --global i18n.commitEncoding gbk