心血来潮,突然想到以前和老师学习的时候使用的版本管理是SVN,那会只要本地提交到SVN服务器,就自动同步到网站根目录,达到了提交了代码,就能看到远程网站的效果。
所以才有了这篇文章,话不多说,开始教程。
简介
Git 是一个开源分布式版本管理系统,可以有效的,方便的管理大小项目版本问题,由Linux内核开发者Linus Torvalds最初开发的。
据维基百科所说:git最为出色的就是它的合并跟踪(merge tracing)能力。
安装命令
教程中使用的是 Linux CentOS 7.3 的版本。因为系统有自带git,这里不写安装教程。如果觉得版本低,可以重装。下面是安装命令:
yum install -y git
添加用户
添加一个Git的用户,用来运行与管理 Git库。命令如下:
useradd git -g www (后面要做钩子,假设网站根目录的用户组是www)
创建 Git仓库
为方便管理,创建一个目录存放所有仓库,命令如下:
//创建管理目录
cd /home
mkdir git
创建第一个仓库,命令如下:
cd git
git init --bare learngit.git // --bare 意思就是创建一个裸库
//成功创建会提示:Initialized empty Git repository in /home/git/learngit.git/
chown -R git:www git //返回home目录,变更用户组
到这里,Git服务器基本搭建成功,接下是添加秘钥、安全问题,设置钩子同步到网站根目录的过程,以及首次 git commit 可能会出现的问题。
客户端生成秘钥
该秘钥用于客户端使用 ssh连接 Git服务器的时候,可以保证不用输入密码。否则客户端每次ssh连接 Git服务器都要输入密码。执行如下命令:
ssh-keygen -t -C '邮箱'
如果没有特殊需求,可以一直按回车。最后两行的意思分别是私钥地址,公钥地址。我们要使用的就是公钥,私钥自己保存就行,不要泄露出去。
创建authorized_keys文件
回到 Git服务器,假设你的git目录下有 .ssh目录 和 authorized_keys文件,那么这里可以跳过,执行以下命令:
cd git
mkdir .ssh -m 700 // 创建目录 并给目录 7 权限,其它组设为0
//将客户端的公钥复制到下面这个文件,有多个用户,一行一个公钥,然后保存退出。
vim authorized_keys
chmod 600 .ssh/authorized_keys //修改权限
注:之后客户端ssh连接git就不用密码了,如果还要密码,那么可能上面的某一步做错了,按顺序一步步来,99%不会出错。
设置目录所属
递归处理git目录,及目录里的文件,子目录都变更所有者,所属用户组。避免出现git无法访问,导致客户端clone失败。执行以下命令:
cd /home
chown -R git:www git
禁止Git用户shell登录
为安全着想,禁止该用户shell登录,保持ssh能使用就行。执行以下命令:
vim /etc/passwd //直接修改用户保存的地方
找到git用户,并修改为图中所示一样:
之后,git用户就不能shell登录。
客户端 clone git仓库
到了这一步,我们来试试之前所做的一切有没有达到想要的结果。不过在这之前,先要下载 git客户端软件。官网下载就比较人性化了,只要打开这个官网下载页面,会自动识别操作系统多少位,然后自动添加下载。安装过程这里就不说了。
git官网下载:https://git-scm.com/download/win
打开安装好的git软件,执行命令如下:
git clone git@服务器IP:/home/git/learngit.git
执行这个命令之后,出现下面这个界面,成功一大半了,这些信息说的是,让你核对来自git公钥指纹,可以忽略。这里输入yes 按回车:
之后出现这个界面,意思是说:已经永久的添加git服务器到信任列表,之后访问就没有这些提示。不过这里问题,就是git服务器22端口没有开启,导致无法clone成功,ssh连接需要开启22端口。还有一种可能就是没有权限访问git仓库,检查上面哪一步没执行顺序来执行命令。
clone 克隆仓库成功会出现下面的这个提示:
后面一行警告是告诉你clone一个空的仓库,这里忽略它的提示。
我在e盘下执行的命令。所以在执行命令的路径可以找到clone的仓库:
注意事项:客户端首次 git commit 的时候,可能会出现以下问题
1)需要输入用户名和邮箱,作用是标识使用该本地仓库的作者是谁,在客户端 git软件 依次执行以下命令:
git config --global user.email '邮箱'
git config --global user.name '用户名'
2)本地仓库推送成功,但是服务器没有找到文件,这是因为裸库为了协同工作,是不会展示文件,不过可以设置 hook 展示文件,执行以下命令:
cd /home/git/hooks && vim post-receive
//添加下面命令 --work-tree 展示文件的目录,--git-dir 仓库目录
#!bin/bash
git --work-tree=/home/www --git-dir=/home/git/learngit.git checkout -f
//保存,执行下面代码
chmod +x post-receive
ps:展示文件的目录需要有写入的权限
本地重新推送然后在 /home/www 就可以看本地推送的文件了。
结语
至此,Git的搭建,全部完成。
可能教程没那么美好,只有懂得教程中所使用的linux基本命令,基本就没什么问题。
如果教程中有什么错误,麻烦告知作者修改。