1.安装gitosis
首先是获取gitosis(这里假设你已经安装过git):
git clone git:
//github.com/res0nat0r/gitosis.git
接下来安装gitosis:
sudo python setup.py install
接下来添加用来管理仓库的用户,用户名任意,我们这里使用git:
useradd git
Mac用户在「系统偏好设置 » 用户与群组 」中添加。
修改PATH,使git用户可以调用git:
vi /home/git/.bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATH
创建key pair,并拷贝
public
key到/tmp下,这样可以确保gitosis-init命令对其有读取权限:
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub /tmp/id_rsa.pub
以git用户来执行gitosis-init命令:
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
此时/home/git下增加了两个目录:
gitosis
repositories
其中gitosis是gitosis的根目录,repositories是仓库存放目录。
如果出现以下错误:
if
install git
from
source, otherwise:
raise child_exception
OSError: [Errno 2] No such file or directory
那么做个symlink:
ln -s /usr/local/bin/git /usr/bin/git
给脚本post-update赋予可执行权限:
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
2. 添加新仓库
gitosis的管理是通过git来管理的,clone一下:
git clone git@localhost:gitosis-admin.git
cd gitosis-admin
ls -l
-rw-r--r-- 1 weizhifeng staff 124 6 14 13:45 gitosis.conf
drwxr-xr-x 3 weizhifeng staff 102 6 14 13:46 keydir
keydir目录用来存放用户的
public
key(.pub文件),gitosis.conf为配置文件。
看一下配置文件:
cat gitosis.conf
[gitosis]
[
group
gitosis-admin]
members = root@pc3
writable = gitosis-admin
其中
group
代表一个组,writable是仓库名,members是此仓库的成员,可以有多个成员,用空格进行分割。
添加一个新仓库:
[
group
test]
members = root@pc3 pc2
writable = test
把更改提交并push到git@localhost:gitosis-admin.git:
git commit -a -m
"添加新仓库test"
git push
在本地创建一个仓库
cd /home/git/repositories
mkdir test.git
git init --bare test.git
chown -R git.git test.git
3. 添加用户
假设我们要添加的用户为pc2,那么需要创建key pair:
ssh-keygen -t rsa
假设生成的
public
key为~/.ssh/pc2.pub
注意.pub文件名和你要在members中添加的用户名要完全一样。
拷贝pc2.pub到keydir中:
cp ~/.ssh/pc2.pub keydir/
把更改push到gitosis-admin.git:
git commit -a -m
"添加pc2到test仓库"
git push
接下来把
private
key分发给pc2,然后他就可以从自己的机器上进行clone了:
git clone git@SERVER_HOSTNAME:test.git
如果出现以下错误:
ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly
是因为使用了内容相同,名字不同的
public
key(.pub)。
4.其他
如果SSH使用的不是22端口,那么请如下修改:
vi ~/.ssh/config
Host myserver.com
Port 2345
配置钩子同步代码
在git仓库hooks下新建post-receive
cd /data/git/xxx.git/hooks
vi post-receive
修改代码:
#!/bin/bash
git --work-tree=/home/website/wwwroot(项目路径) checkout -f(注意项目路径文件权限)
git分支:
git用户提权:
vim /etc/sudoers
添加:
Defaults visiblepw
git ALL=(ALL:ALL) ALL
在命令行执行:
将nginx用户添加到git组:
gpasswd -a nginx git
创建分支:
git checkout -b dev #git checkout 命令加上-b 参数表示创建并切换,相当于执行了以下两条命令:
git branch dev #创建分支
git checkout dev #切换分支
使用git branch命令查看当前分支:
git branch命令会列出所以分支, 当前分支前会标一个*号
切换分支: git checkout master
git merge dev : 把dev分支合并到master上:
git merge 命令用于合并制定分支到当前分支
git branch -d dev #删除dev分支
git branch : 查看分支
详细教程:https://git-scm.com/book/zh/v2