服务器端
第一步:安装git服务
【注】yum 源仓库里的 Git 版本更新不及时,最新版本的 Git 是1.8.3.1,但是官方最新版本已经到了 2.9.2。想要安装最新版本的 Git ,之恶能下载源码进行安装。
# yum info git //查看 yum 源仓库的 Git 信息
可以看出,截至目前,yum 源仓库中最新的 Git 版本才 1.8.3.1 ,而查看最新的 Git 发布版本,已经 2.9.2 了。
// 依赖库安装
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
# yum install gcc perl-ExtUtils-MakeMaker
// 卸载低版本的 Git
# yum remove git
// 下载新版的 Git 源码包 (放在了 /usr/local/git 的目录下,git 是新建的目录)
# cd git
# wget https://github.com/git/git/archive/v2.9.2.tar.gz
# tar -xzvf v2.9.2.tar.gz
分别执行一下命令进行编译安装,编译过程可能比较漫长,请耐心等待完成。
# cd git-2.9.2
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
添加到环境变量
# vim /etc/profile
添加这一条: export PATH=/usr/local/git/bin:$PATH
# source /etc/profile // 使配置立即生效
# git --version // 查看版本号
将git设置为默认路径,不然后面克隆时会报错
# ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack
# ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack
创建一个git用户组和用户,用来运行git服务
# groupadd git
# useradd git -g git
# passwd git
禁止该git用户使用shell登录系统(为了安全性,一般都禁止)
# vim /etc/passwd
找到类似下面的一行
git:x:502:502::/home/git:/bin/bash改为
git:x:502:502::/home/git:/usr/local/git/bin/git-shell保存并退出。
至此, git服务安装完成!
第二步:配置远程仓库
创建一个空仓库
# cd /home
# mkdir git
# cd git
# git init --bare LearnProject.git
到这里,空仓库已经创建成功,仓库的路径为:/home/git/LearnProject.git
通过
git init --bare LearnProject.git建立的仓库是没有工作目录的,如需包含工作目录,请看注1。
为刚刚创建的用户git赋予权限
//chown -R 用户名:组名 文件
# chown -R git:git LearnProject.git
第三步:打开 RSA 认证
进入 /etc/ssh 目录,编辑 sshd_config
# cd /etc/ssh
# vim sshd_config
将下面几个的注释解开(带#为注释)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys保存完成后,重启sshd服务
# /etc/rc.d/init.d/sshd restart
如果运行上述命令出现以下错误:
-bash: /etc/rc.d/init.d/sshd: No such file or directory可以尝试以下命令:
# service sshd restart
或者
# systemctl restart sshd
至此,服务器端git配置完成。
客户端
第一步:配置git
安装git
傻瓜式安装
打开git bash创建git使用者
git config --global user.name "姓名"
git config --global user.email "邮箱"
创建与服务器通讯的密钥
在git bash中,输入一下命令,为自己的邮箱创建一个密钥
ssh-keygen -t rsa -C "邮箱"
一路enter下去
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/***/.ssh/id_rsa):
Created directory '/c/Users/***/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/***/.ssh/id_rsa.
Your public key has been saved in /c/Users/***/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:F0NzRZYN3zMR5oGeOxuQE5LBwoKsEC8Un/0cl4SWk44 ***@******
The key's randomart image is:
+---[RSA 2048]----+
|.+o . . =o= .o*O.|
|o..oo. O.=.+ o+.=|
|o oo .=.oo+ + .+o|
| o Eo.o * o o|
| oS . o . |
| . + |
| + |
| . |
| |
+----[SHA256]-----+
这时候,系统已经为我们创建了一个公钥和密钥,id_rsa是密钥,不能告诉任何人,id_rsa.pub是公钥,可以公开。
将本地的公钥添加到服务器上
- 通过客户端命令行将本地公钥添加进远程服务器中
在gitbash下,输入一下命令
ssh git@IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
- 手动将公钥添加到服务器中
找到id_rsa.pub文件,用编辑器打开,全选复制。
在服务器端,将复制的内容粘贴到authorized_keys文件中
注意文件路径:/root/.ssh/authorized_keys
# vim /root/.ssh/authorized_keys
通过以上两种方法,我们就将本地的公钥添加进服务器中了。如果发现该目录下没有 .ssh 文件,我们可以手动创建一个,并添加一个 authorized_keys 。
第二步:克隆远程仓库cd /vim
创建一个用于本地的git仓库文件夹,在文件夹内克隆远程仓库
git clone git@IP地址:端口/home/git/LearnProject.git
git clone ssh://root@IP地址/home/git/LearnProject.git
这时候,bash会提示你克隆的仓库是空的
Cloning into 'LearnProject'...
warning: You appear to have cloned an empty repository.如果想使用 http 方式克隆,参考 使用nginx搭建http 访问的git服务器
至此,我们完成了远程仓库的克隆。
第三步:push/pull项目
做完以上服务器端/客户端各两步的内容,你的本地git已经可以和git服务器进行通信了,此时我们可以进行常规的项目push和pull了。
注1:建立包含工作目录的仓库
post-receive 实现自动同步到站点目录
如果你是用 git init --bare LernProject.git 建立的仓库,该仓库是没有工作目录的。
我们需要在该仓库的 hooks下,创建 post-receive 文件。
# cd LearnProject.git
# cd hooks
# vim post-receive文件内容为:
#!/bin/bash
git --work-tree=/home/www checkout -f保存退出后,设置权限
# chown git:git post-receive //将该文件用户及用户组都设置成git
# chmod +x post-receive //由于该文件是一个shell文件,应设置为可执行权限创建支持工作目录的远程仓库
# git init <仓库名>
# git config receive.denyCurrentBranch ignore //设置允许远程接收文件在远程仓库 post-receive 钩子文件中添加自动更新工作目录内容
WORK_TREE='../'
git --work-tree="${WORK_TREE}" reset --hard保存退出后,设置权限,同上文。
注2:git如何解决The authenticity of host can’t be established
新生成的密钥,git clone或者push的时候,有可能会报下面的错误:
The authenticity of host '148.70.59.85 (148.70.59.85)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.文件夹内少了一个konwn_hosts文件,本来密钥文件应该是三个,现在只有两个,便报了这样的错误,此时输入yes回车之后,生成了缺少的konwn_hosts文件,便可解决这个问题。
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
ssh_packet_read: Connection closed
【参考】