一、概述

Git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。Git的速度很快,这对于诸如Linux kernel这样的大项目来说自然很重要。Git最为出色的是它的合并追踪(merge tracing)能力。

实际上内核开发团队决定开始开发和使用Git来作为内核开发的版本控制系统的时候,世界开源社群的反对声音不少,最大的理由是Git太艰涩难懂,从Git的内部工作机制来说,的确是这样。但是随着开发的深入,Git的正常使用都由一些友善的命令稿来执行,使Git变得非常好用。现在,越来越多的著名项目采用Git来管理项目开发。

二、实现原理

Git和其他版本控制系统(如CVS)有不少的差别,Git本身关心档案的整体性是否有改变,但多数的CVS,或Subversion系统则在乎档案内容的差异。因此Git更像一个档案系统,直接在本机上取得资料,不必连线到host端取资料回来。

三、安装git

  1. linux上安装:

    linux上安装git可以源代码安装和预编译好的Git二进制安装包安装两种方式, 本次安装是在redHat上采用源码安装的:

    • 主机上建立一个用户git
    • root用户登录,修改/ect目录下sudoers文件,将git用户加入sudo列表

    • 下载源代码 http://git-scm.com/download

    • 上传redHat主机解压编译并安装

        $tar -zxf git-1.7.2.2.tar.gz
        $ cd git-1.7.2.2
        $ make prefix=/usr/local all
        $ sudo make prefix=/usr/local install 其中/usr/local为安装目录
      
    • 修改git用户下 ~/.bash_profile文件(没有新建),添加PATH=$PATH:/usr/local/bin

    • 修改git用户下.bashrc文件(没有新建),添加 PATH=$HOME/bin:$PATH

    • $git –version,显示git版本git version 1.8.1.6,表示git安装成功
  2. windows上安装

    • 下载msysGit安装包 http://code.google.com/p/msysgit
    • 安装msysGit,右键运行git Bash,输入git –version, 显示git version 1.7.11.msysgit.1,windows上git安装成功

四、git配置

  1. linux 上git服务器配置:

    首先我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。 Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。 而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。 这些变量可以存放在以下三个不同的地方:

     • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用git config 时用
       --system 选项,读写的就是这个文件
     • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用git config 时用
     		  --global 选项,读写的就是这个文件
     • 当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):所以
       .git/config 里的配置会覆盖/etc/  gitconfig 中的同名变量
    
    • 配置的是你个人的用户名称和电子邮件地址

      	$ git config --global user.name "tangsz"
        	$ git config --global user.email "tangsz@asiainfo-linkage.com" 
      
    • 文本编辑器

        $ git config --global core.editor vi
      
    • 查看配置信息 git config –list

  2. windows 上msysGit配置

    • 生成公钥 右键打开git Bash,输入ssh-keygen –C “你的email地址 “ –t rsa 就会为你生成一个 SSH Key, 然后会询问一些保存文件的位置,设置密码神马的,直接回车,回车,回车,默认的就可以了,SSH 公 钥默认储存在账户的主目录下的 ~/.ssh 目录something 和 something.pub 来命名的一对文件, 这个 something 通常就是 id_dsa 或 id_rsa,有 .pub 后缀的文件就是公钥

    • 将公钥文件放到主机git用户.ssh目录下(没有此目录就新建),将公钥文件内容追加到 文件authorized_keys文件(没有就新建)尾部即可:

        cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys 
      
    这样后面windows与服务器交互clone、pull等操作时就不用频繁输入密码了

五、服务器上部署git

服务器上部署git仓库有很多种方式,这里简单介绍两种:

  • 直接在服务器上需建立仓库目录执行 git init,通常我们在服务器上建立的仓库都是裸仓库-即一个不含工作目录的仓库,所以我们这里执行git –bare init建立裸仓库,–bare表示建立的是裸仓库

  • 本机clone一个裸仓库移到服务器上,如下:

      $ git clone --bare my_project my_project.git
      $ scp -r my_project.git user@192.168.4.19:/home/git
    

    user为服务器上建立的git用户,192.168.4.19为主机地址,/home/git为裸仓库存放目录,这样所有对该服务器有 SSH 访问权限,并可读取 /home/git 目录的用户都可以用下面的命令克隆该项目

注:裸仓库建立完后,更改裸仓库目录下config文件添加

[receive]
	denyCurrentBranch = ignore)

否则本机push操作会报master branch is currently checked out

六、git操作

git的操作需在实践中慢慢熟悉,这里简单介绍一些平时常用的:

  1. 本地仓库操作

    windows下命令行操作仓库在安装msysGit后只需右键执行git Bash就可以操作了, 也可以下载TortoiseGit通过可视化操作本地及远程仓库,此处就简单介绍命令行操作仓库,不做TortoiseGit操作介绍

    • 克隆一个仓库:git有git、ssh、http(s)几种协议,这里用的是ssh git clone git:192.168.4.19:/home/git/my_project.git git为服务器用户名、192.168.4.19为服务器地址、/home/git/my_project.git为服务器仓库目录

    • git status –检查文件

    • git add 文件名 –新增文件

    • git commit –提交操作

    • git log –查看日志

    • git commit –amend –撤销提交

    • git mv file_from file_to –文件改名

    • git diff –查看working tree与index file的差别

    • git rm –删除文件

  2. 远程仓库操作

    • git remote -v –查看远程仓库

    • git fetch [remote-name] –获取remote-name库数据不merge

    • git push [remote-name] [branch-name] –上传数据都remote-name库branch-name分支

    • git remote show origin – 查看origin库信息

    • git remote rename pb paul —把 pb 改成 paul

    • git pull –从远程获取最新版本并merge到本地,相当于git fetch 和 git merge