服务搭建
一、服务搭建方式
1、本地文件系统搭建,利用NFS共享存储
--git clone /xxxx/testproj.git
--默认会建立本地分支master 并追踪远程仓库 origin/master
--git remote -v 查看远程仓库
--添加其它的本地分支到远程仓库的其它分支并切换到当前分支
git fetch origin/hotfix 获取远程分支更新
git checkout -b hotfix origin/hotfix
--git pull/push
!!缺点回家可能无法访问,比ssh慢
2、ssh搭建
=====服务端====建立一个用户 git
1)在服务器上建立共享目录 mkdir hello.git ,设置目录的所有者是git
2) cd hello.git
3) git --bare init
4) 限定登陆shell为git-shell --/usr/bin/git-shell
git:x:1000:1000::/home/git:/usr/bin/git-shell
=====客户端
1)ssh-keygen生成密钥对
2)ssh-copy-id 提交密钥给服务器,添加到authorized_keys文件中
3)git clone xxxxxxxxx
4) git pull/push
3、git协议
无授权机制、要么所有人都可以下载或push,9418守护进程,可以配置gitosis来添加授权模块
搭建服务
4、http协议只读服务
1)建立bare仓库,放到web目录
--纯粹git clone --bare xxxxxx.git,放到web目录
2)配置特定的挂勾即可允许客户端克隆
$ cd /var/www/htdocs/
$ git clone --bare /path/to/git_project gitproject.git
$ cd gitproject.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
post-update
挂钩会默认运行合适的命令( git update-server-info )来确保通过
HTTP 的获取和克隆正常工作。这条命令在你用 SSH 向仓库推送内容时运行;
3)!!!!!进行过push操作后,库才可以被通过http克隆
5、GitWeb
1)源码安装
git clone git://git.kernel.org/pub/scm/git/git.git
$ cd git/
$ make GITWEB_PROJECTROOT="/opt/git" \
prefix=/usr/gitweb/gitweb.cgi
$ sudo cp -Rf gitweb /var/www/
2)配置
<VirtualHost *:80>
ServerName gitserver
DocumentRoot /var/www/gitweb
<Directory /var/www/gitweb>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
6、git协议加权限控制,守护进程加权限控制gitosis
1) 服务器上安装python-setuptools
2)服务器上下载git clone https://github.com/tv42/gitosis.git
cd gitosis/
python setup.py install
useradd git
3) 复制管理员的共钥到服务器上
scp id_rsa.pub root@192.168.4.42:/tmp/a.pub
4)初始化权限管理项目gitosis-admin.git
su - git
gitosis-init < /tmp/a.pub
在/home/git/下建立里两个目录 gitosis repositories
5)修改gitosis-admin.git中post-update钩子为执行权限
chmod a+x repositories/gitosis-admin.git/hooks/post-update
6)管理员机器克隆管理项目到本地机器
git clone git@192.168.4.42:gitosis-admin.git
!!!!添加新的成员
===在客户机ssh-keygen 生成密钥对,把公钥交给管理员
管理员通过gitosis-admin库,把公钥文件进行用户的命名,复制到keydir下,如:jy.pub
修改配置文件:
[group test]
members=root@gitvm jy------jy就是公钥的文件的名字,注意空格分割。
writable=test
7)通过自定义gitosis.conf文件,添加新的
[group test2]
members=root@gitvm jy------jy就是公钥的文件的名字,注意空格分割。
writable=test2---
git clone时每若test2不存在,那么就自动创建git库