网上有很多搭建的Git仓库都是从裸库开始
我们要做的是将已有项目添加到Linux的服务器上的远程仓库
使用我的linux
版本的英文Centos7
安装git
yum install -y git
创建一个Git的用户来运行的Git服务
1.创建git
用户
adduser git
2.设置用户密码
passwd git
3.禁止shell
登录
vim /etc/passwd
找到git
用户的那一行并进行修改
将
git:x:1003:1003:,,,:/home/git:/bin/bash
修改为
git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell
这样一来创建 git
用户可以正常通过ssh
使用git
,但是无法登录shell
,会更加的安全
创建客户端登录证书
1.客户端创建私钥和公钥
ssh-keygen -t rsa -C "[email protected]"
创建以后你的用户主目录下面就有个.ssh
文件夹数,的里面id.rsa
就是私钥,id.rsa_pub
就是公钥。公钥里面的内容待会要用到
2. git
服务器打开RSA验证
vim /etc/ssh/sshd_config
并找到前面。去掉的#
号
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh /authorized_keys
3.在git
用户的主目录里新建.ssh
文件夹,然后在文件夹里面新建文件authorized_keys
cd /home/git
mkdir .ssh
cd .ssh
vim authorized_keys
4.将客户端的的id.rsa_pub
公钥写进文件authorized_keys
,一行一个。添加了这个以后你连接中央仓库就不需要输入密码了,直接使用公钥和私钥的验证方式
创建git的中央仓库
1.创建git仓库存放目录
mkdir /home/git/repositories
请根据自己的操作系统下载安装对应的git
1.进入到项目内
cd /home/project
2.初始化仓库
git init
3.先把现有仓库导出为裸仓库 - 即一个不包含当前工作目录的仓库
cd ..
git clone --bare project project.git
此时会在家目录下创建project.git目录
将project.git目录移动到你的linux服务器git仓库的目录/home/git/repositories
4.在你的项目目录添加远程服务器
cd /home/project
git remote add origin [email protected](服务器IP地址):/home/git/repositories/project.git
1.创建钩子文件
添加钩子文件本地推代码的时候会将修改的内容提交到/home/git/repositories/project.git
钩子文件会自动跳到/data/websibe/project进行拉代码再次访问你的网站代码就已经被更新了
vim /home/git/repositories/project.git/hooks/post-receive
钩子文件内容
#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
DeployPath="/data/website/project"
cd $DeployPath
git pull origin master
cd $NowPath
exit 0
然后给钩子文件添加执行权限
chmod a+x /home/git/repositories/project.git/hooks/post-receive
将仓库克隆到网站下面
cd /data/website/
git clone /home/git/repositories/project.git
修改仓库与项目的所属组与所属用户为git 不然钩子文件是以git用户执行的,进入项目后pull会没有文件修改权限
chown -R git:git /home/git/repositories/project.git
chown -R git:git/data/website/project
1.修改一些文件内容 尝试提交然后push到仓库
vim test.php
git add .git commit -m 'add test.php'
git push origin master
2.设置操作分支(可省略origin master)
git branch --set-upstream-to=origin/master
3.一键pull与push
git add -A && git commit -m 'test' && git pull && git push