所需环境(linux)
CentOS【我用的是7】
所需软件:git python gitosis openssh-client
具体步骤:
服务器端:
有两个用户(同一台机子,当然你可以用两台机子):一个是作为管理者用户qjjia(管家),一个用户(git)代码托放者(可以理解为仓库)
[root@genitus-86-092 home]# useradd -m git #创建一个git账户作为服务端的仓库 [root@genitus-86-092 git]# passwd git
将该用户作加入sudoers里:
[root@genitus-86-092 home]# vim /etc/sudoers root ALL=(ALL) ALL #直接将用户添加到sudo组里 ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL #将wheel组中的所有用户添加到sudo组 %dlp ALL=(ALL) ALL #将dlp组中的所有用户添加到sudo组 在此,我将git用户填加到dlp组中 usermod -G dlp git 检查有没有添加成功 [root@genitus-86-092 home]# groups git git : git dlp # su - cola //切换到管理者用户 cola
安装相关软件
$ yum install git #安装git $ sudo yum install python python-setuptools #安装python环境 $ git clone git://github.com/res0nat0r/gitosis.git #下载gitosis [cola@genitus-86-092 ~]$ ls gitosis
编译安装gitosis
[qjjia@genitus-86-092 ~]$ cd gitosis/ [qjjia@genitus-86-092 gitosis]$ sudo python setup.py install
生成管家qjjia的公钥,用于初始化使用
[qjjia@genitus-86-092 ~]$ ssh-keygen -t rsa
将生成的公钥拷贝存放在/tmp/cola/中
[qjjia@genitus-86-092 ~]$ cp ~/.ssh/id_rsa.pub /tmp/cola/
用服务器端生成的公钥初始化gitosis,下面一步很关键,请注意!!!
[qjjia@genitus-86-092 ~]$ cd gitosis/ [qjjia@genitus-86-092 gitosis]$ sudo -H -u git gitosis-init < /tmp/cola/id_rsa.pub [qjjia@genitus-86-092 ~]$ su git ####切换至git账户查看~/下的文件 [git@genitus-86-092 ~] $ ls gitosis repositories [git@genitus-86-092 ~]$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
切换回管家qjjia账户,从git账户的目录下(~/repositories/gitosis-admin.git)clone gitosis-admin.git管理平台(这玩意分配账户权限和项目名,对应账户的公钥)
git clone git@localhost:gitosis-admin (这步骤应该是不需要密码的,应为你是用qjjia的公钥初始化gitosis的)
[qjjia@genitus-86-092 ~]$ ll drwxr-xr-x. 4 qjjia dlp 49 Jul 9 15:05 gitosis-admin cd进入,你会发现如下两个文件 [qjjia@genitus-86-092 gitosis-admin]$ ls gitosis.conf (分配账户权限的文件) keydir(这个是目录,存放账户的公钥)
配置账户权限giosis.comf,第一次打开,内容如下
[qjjia@genitus-86-092 gitosis-admin]$ vim gitosis.conf [gitosis] [group gitosis-admin] #组名 members = qjjia@genitus-86-092 #账户名,注意要与keydir目录下的 公钥名一致,但keydir的公钥名有扩展名.pub writable = gitosis-admin #托管的项目名,一般为文件夹名字
针对members的补充:如qjjia@genitus-86-092 对应的公钥名为qjjia@genitus-86-092.pub
然后做如下修改,新填两个用户M 和long 对项目cola进行控制,其对应的公钥为M.pub long.pub
[qjjia@genitus-86-092 gitosis-admin]$ vim gitosis.conf [gitosis] [group gitosis-admin] members = qjjia@genitus-86-092 writable = gitosis-admin [group cola] members = M long qjjia@genitus-86-092 writable = cola
然后在对应的客户端 M 和 long 的机子上生成自己的公钥,上传账户M 和 long 的公钥到 服务端qjjia账户的keydir目录中,结果如下
[qjjia@genitus-86-092 keydir]$ ll total 12 -rw-r--r--. 1 qjjia dlp 400 Jul 9 14:20 long.pub -rw-r--r--. 1 qjjia dlp 397 Jul 9 15:04 M.pub -rw-r--r--. 1 qjjia dlp 402 Jul 9 14:20 qjjia@genitus-86-092.pub
这里举一个例子,在客户端cola下生成公钥上传到keydir的步骤:
在long的主机上
[long@nginx1-86-098 ~]$ ssh-keygen -t rsa #然后一路回车
在qjjia的主机上
[qjjia@genitus-86-092 keydir]$ scp long@192.168.86.92:/home/long/.ssh/id_rsa.pub ./
完成了公钥上传到keydir工作后
做如下操作,将gitosis-admin的修改信息上传至git账户的代码仓库
先回退到gitosis-admin目录
[qjjia@genitus-86-092 ~]$ cd gitosis-admin/ git add . git commit -am "add member john and project foo" git push
在qjjia账户下创建cola项目目录,完成初始化,提交给git仓库
cd ~ mkdir cola cd cola git init touch hello.txt git add hello.txt git commit -am 'first commit' git remote add origin git@localhost:cola.git git push origin master
下面都是客户端的操作:
客户端账户long从仓库clone cola.git,并添加一个新文件hello
[long@nginx1-86-098 ~]$ git clone git@192.168.86.92:cola.git [long@nginx1-86-098 ~]$ cd cola [long@nginx1-86-098 ~]$ touch hello [long@nginx1-86-098 ~]$ git add hello [long@nginx1-86-098 ~]$ git commit -am "add hello file!" [long@nginx1-86-098 ~]$ git push
客户端账户M从仓库clone cola.git,并添加一个新文件sb
[M@nginx1-86-099 ~]$ git clone git@192.168.86.92:cola.git [M@nginx1-86-099 ~]$ cd cola [M@nginx2-86-099 cola]$ ls hello hello.txt [M@nginx2-86-099 cola]$ git add sb [M@nginx2-86-099 cola]$ git commit -am "add sb" [M@nginx2-86-099 cola]$ git push
客户端账户long从仓库 git pull 文件
[long@nginx1-86-098 cola]$ git pull [long@nginx1-86-098 cola]$ ls hello hello.txt sb
常见问题:
git操作需要输入密码
原因
公密未找到
解决
上传id_pub.rsa到keydir并改为'gitosis帐号.pub'形式,如long.pub。扩展名.pub不可省略
交流 qq:370272561
转载于:https://blog.51cto.com/icola/1813763