1、创建一个git用户组和用户,用来运行git服务
- $ groupadd git
- $ useradd git -g git
在指定用户组中新建一个用户git1
- useradd git1 -g git
创建用户user1的时候指定其所属工作组users:
useradd –g users user1
2、创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:
- $ cd /home/git/
- $ mkdir .ssh
- $ chmod 755 .ssh
- $ touch .ssh/authorized_keys
- $ chmod 644 .ssh/authorized_keys
3、初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是/data-disk/git/zhenchao/widom-site.git,在/data-disk/git目录下输入命令:
- mkdir zhenchao
- chown git:git zhenchao/
- cd zhenchao/
- git init --bare widom-site.git
- Initialized empty Git repository in /data-disk/git/zhenchao/widom-site.git/
以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
- chown -R git:git widom-site.git/
拉取仓库:
git clone git@192.168.1.1:/data-disk/git/zhenchao/widom-site.git
IP地址换成自己的,如果出现clone需要输入密码,或无效,可以重置git的密码:
- passwd git
输两次123,就好了
服务器上本地拉git代码,不需要前面IP,冒号前面的都不要:
- git clone /data-disk/git/zhenchao/widom-site.git
报错信息:
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: remote unpack failed: unpack-objects abnormal exit
给当前用户object文件夹权限 :
进入对应的git目录
- chown -R git objects
不同用户不同密钥登录,需要 在服务器上
su 用户名
进入不同的用户再走一遍创建密钥即可!
设置线上自动拉取:
1、进入仓库的hooks目录:
cp post-update.sample post-update
2、给权限
chmod +x post-update
3、编写脚本
vim post-update
- #!/bin/sh
- #
- # An example hook script to prepare a packed repository for use over
- # dumb transports.
- #
- # To enable this hook, rename this file to "post-update".
- # 清除变量,否则会引起报错:remote: fatal: Not a git repository: '.'
- unset GIT_DIR
- ## 该目录为需要更新的目录
- DIR_ONE=/data-disk/temp/
- echo "begin run git pull"
- cd $DIR_ONE
- git clean -df
- git pull origin master
- echo "server git pull success"
- ##exec git update-server-info
- exit 0
cat post-update
chmod +x post-update
报错问题记录:
1、remote: fatal: Not a git repository: '.'
脚本中没有加unset GIT_DIR,需要清除变量
2、权限问题
remote: error: unable to update .git/info/refs: Permission denied
remote: error: unable to update .git/objects/info/packs: Permission denied
直接给git全部权限,欢迎有经验的小伙伴指正
- ## 站点目录,非git仓库
- cd /data-disk/temp
- chmod -R 777 .git
3、权限问题
remote: error: unable to unlink old 'audit_project_1/common/modules/xxxclass.php' (Permission denied)
- chown -R git:git audit_project_1/