Git服务器搭建

这篇教程的前提是你的服务器已经安装了Git环境,在终端中输入

1
$ git --version

如果没有报错,并且显示了

git version 1.7.1

则是已经安装了,我的服务器上的git版本是1.7.1,若没有,请自己部署git环境。这里不做赘述。

开始搭建

  • 第一步,创建git管理用户:
1
$ sudo adduser git
  • 第二步,创建证书登录:

/home/git/目录下新建.ssh

1
2
3
$ cd /home/git
$ mkdir .ssh
$ cd .ssh

然后手动生成证书

1
$ ssh-keygen -t rsa

将生成的.pub文件内容copy到/root/.ssh/authorized_keys文件中,一行一个。

  • 第三步,初始化git仓库:

选定一个目录作为git仓库,例如/git/sample.git

1
$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git

1
$ sudo chown -R git:git sample.git
  • 第四步,禁用shell登录:

出于安全考虑,创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

1
git:x:505:505::/home/git:/bin/bash

改为:

1
git:x:505:505::/home/git:/usr/bin/git-shell

具体命令:

1
$ usermod -s /usr/bin/git-shell git

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

  • 第五步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

1
2
3
$ git clone git@server:/git/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的就是git操作了,具体查看git命令。

对于已经搭建好了的git服务器,现在需要实现在用户push时,将项目自动部署到服务器上,例如将上个教程中的/git/sample.git部署到/public/sample/下,这就要利用git的hooks中的post-receive来实现代码提交完成之后的动作。将仓库指定一个--work-tree然后进行检出操作checkout --force

具体步骤:

新建sample文件夹,并给777权限。

1
2
3
$ cd /public
$ mkdir sample
$ chmod -R 777 sample/

进入/git/sample.git/hooks,并将post-receive.sample复制一份post-receive,并且编写代码如下

1
2
3
4
5
# 指定我的代码检出目录
DIR=/public/sample/
git --work-tree=${DIR} clean -fd
# 直接强制检出
git --work-tree=${DIR} checkout --force

保存退出即可。

注意点

  1. 如果我们没有配置ssh免密码登陆的话,我们需要在push代码的时候输入密码
  2. 如果我们添加的远程仓库不是root@xxx.xxx.xx.xx,例如是abc@xx.xx.xx.xx,那么我们要确保abc用户对wx.git目录下的文件有777权限。

由于Git系列(一)Git服务器搭建已经设置了免密登陆,所以大胆push吧