http://www.cnblogs.com/charliePU/p/7528226.html
https://www.linuxidc.com/Linux/2015-07/120616.htm
root@ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
注意:如果安装失败,可能软件库过旧,用"sudo apt-get update"命令,更新软件库,然后再继续安装。
该软件是用来安装gitosis的。
安装命令:root@ubuntu:~$ sudo apt-get install python-setuptools
Gitosis主要用于管理用户对仓库的操作权限。
Pre:安装gitosis之前,需要初始化git服务器用户信息。输入命令:
root@ubuntu:~$ git config --global user.name "yourname"
root@ubuntu:~$ git config --global user.email "[email protected]"
root@ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意:中间是两个数字0。
root@ubuntu:~$ cd gitosis
root@ubuntu:~/gitosis$ sudo python setup.py install
到这里,服务器上git所需软件都已安装完毕.
root@ubuntu:~/gitosis$ sudo useradd -m git
修改git用户密码:
root@ubuntu:~/gitosis$ sudo passwd git 输入密码
root@ubuntu:~/gitosis$ sudo mkdir /home/gitrepository
root@ubuntu:~/gitosis$ sudo chown git:git /home/gitrepository
root@ubuntu:~/gitosis$ sudo chmod 700 /home/gitrepository
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。
root@ubuntu:~/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories
ssh-keygen -t rsa
这里会提示输入密码(使用公钥时的密码),一般我们不输入直接回车即可。
远程服务器:用管理员计算机生成的公钥id_rsa.pub来对gitosis进行初始化。
1.可以在服务器上新建id_rsa.pub文件然后手动复制公钥。2.本地将id_rsa.pub推送到到服务器 "/tmp " 目录下,
smallwaylzy@smallway MINGW64 /d/git/gitserver
$ scp /.ssh/id_rsa.pub root@serverIP:/tmp
本地服务器:用刚生成公钥id_rsa.pub来对gitosis进行初始化。
输入命令:root@ubuntu:~/gitosis$ sudo -H -u git gitosis-init < /root/.ssh/id_rsa.pub
“ /root/.ssh/id_rsa.pub ”为公钥路径
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一个post-update文件添加可执行的权限。
root@ubuntu:/home/git$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
后边路径根据初始化提示的gitosisi的实际路径填写
首先需要在管理员(前面生成ssh公钥用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。
在客户端(windows)机器上新建一个目录用于存放gitosis-admin.git仓库
smallwaylzy@smallway MINGW64 /d/git/gitserver
$ git clone git@serverIP:gitosis-admin.git
clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用来存放ssh公钥文件(一般以“micheallee.pub”命名,gitosis.conf配置文件中需使用相同用户名(micheallee)),用于认证请求的客户端机器。
现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。
[gitosis]
[group gitosis-admin] ####管理员组
members = micheallee ####管理员用户名,需要在keydir目录下找到相应的 .pub 文件,多个可用空格隔开(下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)
[group testwrite]
members = micheallee zhangsan
writable = mytestproject
[group testread]
members = micheallee lisa
readonly= mytestproject
因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。
smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git add .
smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git commit -am "add a user permission"
smallwaylzy@smallway MINGW64 /d/git/gitserver (master)
$ git push origin master
现在,服务端的git就已经安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器上的相应项目仓库进行相应的工作了。
root@ubuntu:/home/git$ su git
git@ubuntu:/home/git$ cd /home/gitrepository
git@ubuntu:/home/gitrepository$ mkdir mytestproject.git
git@ubuntu:/home/gitrepository$ cd mytestproject.git/
git@ubuntu:/home/gitrepository$ git init --bare
git@ubuntu:/home/gitrepository$ exit
[group testwrite]
members = micheallee zhangsan
writable = mytestproject
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler
$ git init
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$ git remote add origin git@serverIP:mytestproject.git
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git add .
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git commit -m "set up a new repository"
smallwaylzy@smallway MINGW64 /d/git/gitserver/new foler (master)
$git git push origin master
原因:仓库本身没有写权限
解决办法:chown -R git:git pushtest.git