前言
我们可以GitHub发布一些开源代码的公共仓库,但对于私密仓库就需要收费了。公司内部通常会搭建自己的Git服务器,我也通过在自己的服务器上搭建练习一下。
开始前先说一下服务器信息,这里是阿里云的CentOS 6.5 64位操作系统。
确认服务器是否安装Git
[root@iZ25r8k6ifuZ git]# rpm -qa git
git-1.7.1-3.el6_4.1.x86_64
这里也已经安装过了,如果没有安装可以用yum install git 安装。
------------------------------------------------------------------------------------------
1.首先安装git
yum install git
2.新建一个linux用户,起名为git
adduser git
3.在git用户目录中新建目录 .ssh
cd /home/git/
mkdir .ssh
4.在/home/git/.ssh/目录中新建authorized_keys文件,并将客户端提供的公钥(id_rsa.pub)黏贴到该文件中
touch authorized_keys 或 vi authorized_keys
5.在项目目录创建一个git裸仓库,假如当前项目目录为/home/git/project.git
git init --bare project.git
6.将项目目录和git用户目录下的.ssh目录的所有者和所属组都设置成git
chown -R git.git project.git
chown -R git.git /home/git/.ssh/
7.为了安全考虑,禁用git用户的shell登录
vi /etc/passwd
注释 ##git:x:500:500::/home/git:/bin/bash
改为 git:x:500:500:git version control:/home/git:/usr/bin/git-shell
8.git服务器打开RSA认证
vi /etc/ssh/sshd_config
下面3个打开
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
重启 ssh /etc/rc.d/init.d/sshd restart
client
1.生成公钥,并复制到剪切板
ssh-keygen -t rsa
pbcopy < ~/.ssh/id_rsa.pub
此步骤要将公钥发给git服务器管理员
2.在本地新建git仓库
git init
3.新建一个文件并推送到服务器
touch readme.txt
git add readme.txt
git commit -m "readme"
git remote add origin git@xxx.xxx.xxx.xxx:/home/git/project.git
git push origin master
注:如果提示需要密码,请检测公钥是否配置成功或RSA是否开启。
自己linux 测试
git clone git@192.168.223.128:/home/git/project.git /home/www/wwwroot/project
git hook 自动布署代码
假设你的项目也是跑在此台服务器上,那自动布署代码就很简单了,比如你的在线服务代码在 /home/www/wwwroot/project 文件夹中。
你先初始化代码库:
$ git clone /home/git/project.git /home/www/wwwroot/project
创建脚本
现在我们进入 /home/git/project.git 目录下的 hooks 文件夹,编辑脚本:
cd /home/git/project.git/hooks
vim post-receive
-------------------------------------------
#!/bin/sh
# 删除 GIT_DIR 环境变量,避免干扰
unset GIT_DIR
# 增加生产环境项目路径环境变量
WORKPATH=/home/www/wwwroot/project
# 进入生产目录
cd $WORKPATH git add . -A && git stash
git pull origin master
echo 'done!!!'
-------------------------------------------
chown -R git:git post-receive
chmod +x post-receive
测试执行下
./post-receive
---------------------------------------------------------------
如果报错
remote: No local changes to save
remote: error: cannot open .git/FETCH_HEAD: Permission denied
remote:
remote: done!!!
修改
cd /home/www/wwwroot/project
chown -R git:git .git