欢迎阅读!

潇湘夜雨

当前位置: 主页 > 服务器 >

git-2.14.0安装配置实战

时间:2017-08-06 11:20来源:潇湘夜雨 作者:华嵩阳 点击:
一、git安装 1、下载 https://github.com/git/git/archive/v2.14.0-rc0.tar.gz 2、源码编译安装 Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先 安装这些依赖工具。在有 y
 
 
 
一、git安装
 
1、下载
https://github.com/git/git/archive/v2.14.0-rc0.tar.gz
 
 
2、源码编译安装
 
Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先
安装这些依赖工具。在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比
如 Debian 体系),可以用下面的命令安装:
 
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc xmlto
 
[root@mq129 git]# tar -zxf git-2.14.0-rc0.tar.gz 
[root@mq129 git]# cd git-2.14.0-rc0
 
方式一:
[root@mq129 git-2.14.0-rc0]# make prefix=/usr/local/git all doc
#这里同时指定all和doc这两个目标,指定doc是为了安装git的帮助文档到man手册里面,只指定all的话,默认并不包含git的帮助文档,这样在man手册中就查不到git的帮助。
[root@mq129 git-2.14.0-rc0]# make prefix=/usr/local/git install  install-doc install-html
 
常见错误:
1、缺少asciidoc
/bin/sh: line 1: asciidoc: command not found
make[1]: *** [git-add.html] 错误 127
make[1]: Leaving directory `/root/git/git-2.14.0-rc0/Documentation'
make: *** [doc] 错误 2
解决方法:
[root@mq129 git-2.14.0-rc0]# yum list all|grep asciidoc
asciidoc.noarch                             8.4.5-4.1.el6                base   
[root@mq129 git-2.14.0-rc0]# yum install -y asciidoc.noarch
 
2、缺少xmlto
XMLTO git-add.1
/bin/sh: line 1: xmlto: command not found
make[1]: *** [git-add.1] 错误 127
make[1]: Leaving directory `/root/git/git-2.14.0-rc0/Documentation'
make: *** [doc] 错误 2
解决方法:
[root@mq129 git-2.14.0-rc0]# yum list all|grep xmlto
python-xmltodict.noarch                     0.4.2-2.el6                  epel   
xmlto.x86_64                                0.0.23-3.el6                 base   
xmlto-tex.noarch                            0.0.23-3.el6                 base   
xmlto-xhtml.noarch                          0.0.23-3.el6                 base   
xmltoman.noarch                             0.4-4.el6                    base   
[root@mq129 git-2.14.0-rc0]# yum -y install xmlto.x86_64
 
 
 
 
 方式二:  
        ~]# yum -y install autoconf  
        ~]# make configure   或者    autoconf  
        # 备注:生成 configure 文件  
        ~]# ./configure --prefix=/usr/local/git   
        ~]# make all doc  
        ~]# make install install-doc install-html  
  
 方式三:  
    ~]# yum -y install git      # 安装 git  
    ~]# yum -y install git-all.noarch      # 安装 git 所有的包,非必须 
 
 
 
3、环境配置
 
echo 'export PATH=/usr/local/git/bin:$PATH' > /etc/profile.d/git.sh
 
[root@mq129 ~]# echo 'export PATH=/usr/local/git/bin:$PATH' > /etc/profile.d/git.sh
[root@mq129 ~]# source /etc/profile
[root@mq129 ~]# git --version
git version 2.14.0-rc0
 
 
4、man 文档配置
[root@mq129 ~]# vim /etc/man.config
 
添加内容:MANPATH /usr/local/git/share/man
 
查看帮助  
格式一:  
~]# git help init  
格式二:  
~]# man git-init  
 
 
 
      
 
5、服务器身份认证(authorized_keys)
 
    把本地的公钥 id_rsa.pub 里面的内容加入到 /home/git/.ssh/authorized_keys,一行一个,可以加入多个公钥,git 操作时不再需要密码。  
[root@mq129 ~]# cat .ssh/id_rsa.pub >/home/git/.ssh/authorized_keys 
[root@mq129 ~]# ssh get@mq129
get@mq129's password: 
 
[root@mq129 ~]# ssh git@mq129
[git@mq129 ~]$ exit
  
    4:初始化仓库:(结尾为 .git)  
            创建空项目  
                ~]# cd /home/git     # 进入git家目录  
                ~]# git init --bare useryx.git  
                    # 例如 git init --bare 仓库名.git  
[root@mq129 ~]# cd /home/git/
[root@mq129 git]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2
[root@mq129 git]# git init --bare useryx.git
已初始化空的 Git 仓库于 /home/git/useryx.git/
  
            项目已有内容  
            ~]# git init   
                # cd 进入项目进行初始化  
            ~]# git clone --bare 目录名 仓库.git  
                # 例如:git clone --bare useryx useryx.git  
                # 仓库外面执行  
  
    5:修改仓库用户组为 git  
            ~]# chown git:git useryx.git  
  
    6:拉取仓库  
            ~]# git clone [ssh://]用户名@地址:仓库名.git  
                # 例如:git clone git@192.168.31.73:useryx.git 或者 家目录下的一个文件内如 git clone git@192.168.31.73:/home/git/dir/a.git  
 
 
5、创建一个git用户,用来运行git服务
1:添加用户:  
~]# useradd git  
  
2:权限(用户组合用户均为git):  
/home/git/.ssh      权限为:700  
/home/git/.ssh/authorized_keys  权限为:600  
~]# mkdir /home/git/.ssh  
~]# chmod 700 /home/git/.ssh  
~]# touch /home/git/.ssh/authorized_keys  
~]# chmod 600 /home/git/.ssh/authorized_keys  
~]# chown -R git:git /home/git/.ssh   
  
# 注意: id_rsa 权限为 600     id_rsa.pub  权限为 644  
 
6、创建证书登录:
 
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
创建公钥是在客户端创建,然后添加到服务端的证书文件中。
 
7、初始化Git仓库:
 
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
[root@mq129 ~]# cd /srv/
[root@mq129 srv]# git init --bare sample.git
已初始化空的 Git 仓库于 /srv/sample.git/
[root@mq129 srv]# ls
sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了
共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常
都以.git结尾。然后,把owner改为git:
 
[root@mq129 srv]# chown -R git:git sample.git 
  
8、禁止ssh用户登录,可以不用设置。  
    ~]# vim /etc/passwd  
        # 修改git 用户登录shell  
以下两种方式任选一种:
    1:使用linux系统的  /sbin/nologin   不允许登录  
        git:x:1001:1001::/home/git:/sbin/nologin  
    2:使用git服务 git-shell 的 /usr/local/git/bin/git-shell,which git-shell 查看命令位置。  
        git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell  
 
gitshell常见错误: 
[root@mq129 bin]# ssh git@mq129
Last login: Fri Jul 21 15:22:38 2017 from mq129
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to mq129 closed.
错误原因:1、需要在git用户的家目录下创建一个git-shell-commands目录
  2、可能是因为git-shell的权限没有赋给git用户
 
[root@mq129 bin]# cd /home/git/
[root@mq129 git]# ls
useryx.git
[root@mq129 git]# mkdir git-shell-commands
 
 
二、客户端初始化配置
 
1、客户端git安装和认证
[root@mq128 ~]# yum -y install git
客户端生成公钥与私钥 ssh-keygen(切换至需要生成公钥与私钥的用户)
 
[root@mq128 ~]# useradd git
[root@mq128 ~]# su - git
[git@mq128 ~]$ ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P '' #创建公钥
Generating public/private rsa key pair.
Created directory '/home/git/.ssh'.
Your identification has been saved in /home/git/.ssh/id_rsa.
Your public key has been saved in /home/git/.ssh/id_rsa.pub.
The key fingerprint is:
a0:5e:82:c5:d5:8a:31:09:35:9c:5c:1d:1e:fe:0a:b8 git@mq128
The key's randomart image is:
+--[ RSA 2048]----+
|  .=o+ooo.       |
|   .Bo oo.       |
|    o+..o        |
|   o.o.. .       |
|  . + o S .      |
|   . + . .       |
|    E   .        |
|                 |
|                 |
+-----------------+
 
[git@mq128 ~]$ cat .ssh/id_rsa.pub  #将公钥信息添加到mq129服务器的/home/git/.ssh/authorized_keys文件中
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzRTMh2q9v/KFE2rtLZcp8rBc75OjqVVgzQiTA6Py2VQ6SWN2B0FoVs010o3xrzEUFLDleBtzF0oIf5102+Ms9jHXQOZbQ/pbOesXQCVak5+kQbk/jai3mNi0bhy9+7VrSjziGrkkrJLEN+ToZuzacd7V+IjAkxCT3/mpARr57vBl0B26dFl1Y2N3ZF9NUKUlSDIiMgTkbKmtKyECpU5eO7WVmGsDjBE3Pop0tKHRp288If771SM+Wr+XHNS1kIK5NTxrXiRV5VEcofH87vRyfr2R56dj9i48x9NoscfCR+losCBw4Wj0jHaAITWhkRFOxRtktR6Zhta0inn44q8Ibw== git@mq128
 
[git@mq128 ~]$ ssh git@mq129 #添加公钥成功后可以直接无密码登录mq129服务器
The authenticity of host 'mq129 (192.168.198.129)' can't be established.
RSA key fingerprint is 10:62:b7:95:e7:38:a8:82:27:58:f6:d2:30:40:c7:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mq129,192.168.198.129' (RSA) to the list of known hosts.
Last login: Fri Jul 21 16:42:15 2017 from mq129
git> 
 
安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中
[git@mq128 sample]$ git config --global user.name lzh
[git@mq128 sample]$ git config --global user.email lzh@gittest
 
2、克隆远程仓库:
 
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行
 
[git@mq128 ~]$ mkdir srv
[git@mq128 ~]$ cd srv/
[git@mq128 srv]$ git clone git@mq129:/srv/sample.git
Initialized empty Git repository in /home/git/srv/sample/.git/
warning: You appear to have cloned an empty repository.
 
 
3、添加文件
 
[git@mq128 ~]$ cd srv/sample/
[git@mq128 sample]$ ls
test.txt
[git@mq128 sample]$ ls -a
.  ..  .git  test.txt
[git@mq128 sample]$ git add test.txt 
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
 
[git@mq128 sample]$git commit -m "add test"
 
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
 
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
 
git commit命令执行成功后会告诉你,1个文件被改动
 
3、添加远程仓库
 
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个
Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作
为备份,又可以让其他人通过该仓库来协作,真是一举多得。
 
[git@mq128 sample]$ git remote add origin git@mq129:/srv/sample.git
fatal: remote origin already exists. #这里的提示是因为前面已经克隆了远程仓库,而且默认名为origin,可以忽略改步骤,或者修改origin名称。
 
[git@mq128 sample]$ git push -u origin master #把当前分支master推送到远程
Counting objects: 6, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 467 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@mq129:/srv/sample.git
* [new branch]      master -> master
Branch master set up to track remote branch master from origin.
[git@mq128 sample]$ git push -u origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date
 
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
 
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容
推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
 
[root@mq129 sample.git]# git log #查看远程服务器的日志
commit 5aacad902a3679e15b9b2d1c05cf585cd04baa8f (HEAD -> master)
Author: lzh <lzh@gittest>
Date:   Fri Jul 21 17:35:00 2017 +0800
 
wrote a test file
 
commit 2aa5f64ada87fa4cc16d3509a80978354f8b3452
Author: git <git@mq128.(none)>
Date:   Fri Jul 21 17:29:40 2017 +0800
 
注意:远程服务器的git仓库是空的,不能查看文件,但是可以在远程git服务器的版本信息克隆岛远程服务器本地。
[root@mq129 git]# git clone /srv/sample.git/ test #本地克隆
正克隆到 'test'...
完成。
 
[root@mq129 test]# ls #可以看到刚才客户端更新的文件
test.txt
 
[root@mq129 test]# git ls-files #已追踪的(tracked)文件
test.txt
 
[root@mq129 test]# git config --list #本地仓库配置信息
user.name=lzh
user.email=lzh@gittest129
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=/srv/sample.git/ #远程仓库
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
 
 
4、git 恢复丢失的文件  
[git@mq128 sample]$ ls #没有文件
[git@mq128 sample]$ git checkout HEAD test.txt
[git@mq128 sample]$ ls
test.txt
 
5、客户端与服务器端获取与推送
 
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
   然后比较本地的master分支和origin/master分支的差别
   最后进行合并
   上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp 
git merge tmp
 
    从远程获取最新的版本到本地的test分支上
   之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
 
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
 
客户端修改、提交、推送:
[git@mq128 sample]$ mkdir data
[git@mq128 sample]$ cd data/
[git@mq128 data]$ vim data.txt
[git@mq128 data]$ cd ..
[git@mq128 sample]$ git add test.txt data  #添加丢给的文件到本地仓库
[git@mq128 sample]$ git commit -m 'update 128' #提交修改到本地仓库
[master 6095280] update 128
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 data/data.txt
[git@mq128 sample]$ git push
Counting objects: 7, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 403 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
To git@mq129:/srv/sample.git
   64efa5b..6095280  master -> master
[git@mq128 sample]$ git push #推送到远程git仓库
Counting objects: 7, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 403 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
To git@mq129:/srv/sample.git
   64efa5b..6095280  master -> master    
   
服务端获取、修改、提交:
[root@mq129 test]# git fetch
remote: 对象计数中: 5, 完成.
remote: 压缩对象中: 100% (3/3), 完成.
remote: Total 5 (delta 0), reused 0 (delta 0)
展开对象中: 100% (5/5), 完成.
来自 /srv/sample
   64efa5b..6095280  master     -> origin/master
[root@mq129 test]# ls
test.txt
[root@mq129 test]# git status
位于分支 master
您的分支落后 'origin/master' 共 1 个提交,并且可以快进。
  (使用 "git pull" 来更新您的本地分支)
 
无文件要提交,干净的工作区
[root@mq129 test]# git pull #更新您的本地分支
更新 64efa5b..6095280
Fast-forward
data/data.txt | 1 + #更新本地当前文件成功
test.txt      | 1 +
2 files changed, 2 insertions(+)
create mode 100644 data/data.txt
[root@mq129 test]# ls
data  test.txt
注意:这里服务端获取文件,并不是远程仓库,而是远程仓库的一个本地克隆,本质上也是一个客户端,只是它服务器上而已,
 
同理服务器上的客户端的更改也可以同步到mq128上的客户端
[root@mq129 test]# vim data/data.txt #丢给文件
[root@mq129 test]# git add data/
[root@mq129 test]# git commit
终止提交因为提交说明为空。
[root@mq129 test]# git commit -m 'update data 129'
[master 4c36982] update data 129
1 file changed, 1 insertion(+)
[root@mq129 test]# git push #推送到远程仓库
对象计数中: 4, 完成.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (4/4), 334 bytes | 0 bytes/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To /srv/sample.git/
   6095280..4c36982  master -> master
 
[git@mq128 sample]$ git fetch #获取远程仓库的信息、但不会merge
remote: 对象计数中: 4, 完成.
remote: 压缩对象中: 100% (2/2), 完成.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From mq129:/srv/sample
   6095280..4c36982  master     -> origin/master
[git@mq128 sample]$ git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. #还未更新
#
nothing to commit (working directory clean)
[git@mq128 sample]$ git pull #从远程获取最新版本并merge到本地
Updating 6095280..4c36982
Fast-forward
data/data.txt |    1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[git@mq128 sample]$ git status
# On branch master
nothing to commit (working directory clean)
[git@mq128 sample]$ cat data/data.txt 
how are you ?
update 128 #已经更新的内容
 
(责任编辑:liangzh)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容