搭建git服务器
git 2018-03-30 14:23:53

 

1、创建一个git用户组和用户,用来运行git服务

C/C++ Code复制内容到剪贴板
  1. $ groupadd git  
  2. $ useradd git -g git  

 

在指定用户组中新建一个用户git1

PHP Code复制内容到剪贴板
  1. useradd git1 -g git  

 

创建用户user1的时候指定其所属工作组users:

useradd –g users user1 

 

 

2、创建证书登录

收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

如果没有该文件创建它:

C/C++ Code复制内容到剪贴板
  1. $ cd /home/git/  
  2. $ mkdir .ssh  
  3. $ chmod 755 .ssh  
  4. $ touch .ssh/authorized_keys  
  5. $ chmod 644 .ssh/authorized_keys  

 

3、初始化Git仓库

首先我们选定一个目录作为Git仓库,假定是/data-disk/git/zhenchao/widom-site.git,在/data-disk/git目录下输入命令:

C/C++ Code复制内容到剪贴板
  1. mkdir zhenchao  
  2. chown git:git zhenchao/  
  3. cd zhenchao/  
  4. git init --bare widom-site.git  
  5.   
  6. Initialized empty Git repository in /data-disk/git/zhenchao/widom-site.git/  

 

以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:

C/C++ Code复制内容到剪贴板
  1. chown -R git:git widom-site.git/  

 


 

拉取仓库:

git clone git@192.168.1.1:/data-disk/git/zhenchao/widom-site.git

IP地址换成自己的,如果出现clone需要输入密码,或无效,可以重置git的密码:

C/C++ Code复制内容到剪贴板
  1. passwd git  

 

输两次123,就好了

 

服务器上本地拉git代码,不需要前面IP,冒号前面的都不要:

C/C++ Code复制内容到剪贴板
  1. 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目录

C/C++ Code复制内容到剪贴板
  1. chown -R git objects  

 

 

 


 

不同用户不同密钥登录,需要 在服务器上

su 用户名

进入不同的用户再走一遍创建密钥即可!

 


 

设置线上自动拉取:

1、进入仓库的hooks目录:

cp post-update.sample post-update

 

2、给权限

chmod +x post-update

 

3、编写脚本

vim post-update

 

C/C++ Code复制内容到剪贴板
  1. #!/bin/sh  
  2. #  
  3. # An example hook script to prepare a packed repository for use over  
  4. # dumb transports.  
  5. #  
  6. # To enable this hook, rename this file to "post-update".  
  7.   
  8. # 清除变量,否则会引起报错:remote: fatal: Not a git repository: '.'  
  9. unset GIT_DIR  
  10.   
  11. ## 该目录为需要更新的目录  
  12. DIR_ONE=/data-disk/temp/  
  13. echo "begin run git pull"  
  14. cd $DIR_ONE  
  15. git clean -df  
  16. git pull origin master  
  17. echo "server git pull success"  
  18. ##exec git update-server-info  
  19. 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全部权限,欢迎有经验的小伙伴指正

PHP Code复制内容到剪贴板
  1. ## 站点目录,非git仓库  
  2. cd /data-disk/temp  
  3.   
  4. chmod -R 777 .git  

 

3、权限问题

remote: error: unable to unlink old 'audit_project_1/common/modules/xxxclass.php' (Permission denied)

 

PHP Code复制内容到剪贴板
  1. chown -R git:git audit_project_1/  

 

 

 

本文来自于:http://www.yoyo88.cn/study/git/290.html

Powered by yoyo苏ICP备15045725号