Git诞生于Linux平台并做为版本控制系统帅先服务于Linux核心,因此在Linux安装Git是非常方便的。可以通过不同的方式在Linux上安装Git。一种方法是通过Linux发行版的包管理器安装已经编译好的二进制格式的Git软件包。另外一种方式就是从Git源码开始安装。
用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。
访问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命令。
如果在本地克隆一个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
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
Git的本地化做的并不完善,命令的输出以及命令的帮助还只能输出英文,也许在未来版本会使用gettext实现本地化,就像目前对git-gui命令所做的那样。
使用中文的用户最关心的问题还有:是否可以在提交说明中使用中文?是否可以使用中文文件名或者目录名?是否可以使用中文来命名分支或者里程碑?简单的说,可以在提交说明中使用中文,但是若使用非UTF-8字符集,则需要为Git做些设置。至于使用中文来命名文件、目录或引用,只有在使用UTF-8字符集的环境下才可以(Windows用户使用Cygwin),否则尽量避免使用。
UTF-8字符集
Linux平台的中文用户一般会使用utf-8字符集,Git在utf-8字符集下可以工作的非常好。
但是默认设置下,带有中文文件名的文件,在工作区状态输出、查看历史更改概要、以及在补丁文件中,文件名不能正确显示为中文,而是用若干8进制编码来显示中文,如下:
$ git status -s
?? "\350\257\264\346\230\216.txt"
通过设置变量core.quotepath为false,就可以解决中文文件名在这些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