1、安装git服务器所需软件
需要root权限
sudo apt-get install git-core openssh-server openssh-client python-setuptools
注:
git-core:git核心软件
openssh-server和openssh-client:git通过ssh协议在服务器与客户端之间进行数据传输
python-setuptools:gitosis依赖
2、初始化服务器git用户信息
git config --global user.name "username"
git config --global user.email "****@gmail.com"
3、安装gitosis
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
sudo python setup.py install
安装gitosis主要是给用户授权
4、创建git管理员账号、配置git
创建git账号(git)作为git服务器的管理员,可以管理其他用户的项目权限
sudo useradd -m git
sudo passwd git
创建仓库存储点(如在/home目录下),并设置只有git用户拥有所有权限,其他用户没有任何权限
sudo mkdir /home/gitrepository
sudo chown git:git /home/gitrepository/
sudo chmod 700 /home/gitrepository/
5、创建仓库映射链接
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库默认在/home/git/repositories/目录下,所以需要创建一个链接映射,让他指向前面创建的专门用于存放项目的仓库目录/home/gitrepository
su - git
ln -s /home/gitrepository /home/git/repositories
6、(git用户下)生成公钥
ssh-keygen -t rsa
7、对gitosis初始化
利用6生成的公钥id_rsa.pub对gitosis进行初始化
gitosis-init < ~/.ssh/id_rsa.pub
gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一
个post-update文件添加可执行的权限。
sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
8、服务器上创建项目仓库
su - git
cd /home/gitrepository
git init --bare test.git
9、客户端操作git仓库
首先在客户端生成ssh公钥
把服务器上的gitosis-damin.git仓库克隆到客户端机器上
git clone git@192.168.1.20:repositories/gitosis-admin.git
clone下来后会有一个gitosis.conf的配置文件和一个keydir的目录
gitosis.conf用于配置用户的权限信息
keydir主要存放用户ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器
把客户端机器生成的.pub文件改个名字(格式“用户名.pub”)复制到keydir目录下
编辑gitosis.conf文件
[gitosis]
[group gitosis-admin] ####管理员组
members = charn@ubuntu ####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(
下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)
[group testwrite] ####可写权限组
members = zhangsan####组用户
writable = mytestproject####可写的项目仓库名
[group testread]####只读权限组
members =lisi####组用户
readonly= mytestproject####只读项目仓库名
因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。
ubuntu:~/gitadmin/gitosis-admin$ git add .
ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
ubuntu:~/gitadmin/gitosis-admin$ git push origin master
10、新建git项目
1)首先创建git远程仓库
git init --bare project.git
2)在客户端创建项目
mkdir project
3)客户端git项目与远程仓库关联
cd testgit
git init
git add .
git commit -am "init a base version,add a first file for push to server"
git remote add origin git@192.168.1.20:repositories/project.git
git push origin master
删除git remote rm origin
11、支持web
安装lighttpd: sudo apt-get install lighttpd
在远程仓库home/gitrepository开启git web服务: git instaweb
访问ip:1234端口即可
若端口被占用执行如下命令: pkill lighttpd, 再重新执行git instaweb
错误:
1、/usr/sbin/lighttpd: symbol lookup error: /usr/sbin/lighttpd: undefined symbol: FAMNoExists
sudo apt-get install gamin