环境配置
服务器:阿里云(云服务器ECS)、内存1G、带宽1M、CPU 1核。
本地:MacBook Pro
系统:Ubuntu
因为github上的私有库是收费的,所以搭一个自己的git服务器。也满足自己的动手欲……hh
安装Gitosis
gitosis主要用来Git仓库的权限管理,默认情况下git也是有权限管理的,但是不太好用,或者用起来比较复杂,所以选择了gitosis第三方的权限管理工具。使用Gitosis可以在GIt上面管理访问仓库的用户权限,允许某些用户访问指定的仓库,对指定的仓库拥有读写控制,gitosis 是基于git的管理方式,服务器安装好gitosis以后,超级管理员的客户端PC就 “git clone gitosis” 到本地,以后的工作,比如新仓库创建,权限管理都是在超级管理员的PC上进的,超级管理员的PC修改gitosis的配置后,需要把修改项提交到服务器端,这样其他的用户才有权限从服务器获取到源码进行Git管理,需要注意的是新仓库的创建,权限的管理务必不要直接在Git服务器上面进行修改,超级管理员的PC才具有这些功能。
获取并安装gitosis
cd /home/workspace git clone git://eagain.net/gitosis.git //测试时从这拿不到,可换成 git clone https://github.com/res0nat0r/gitosis.git cd gitosis sudo python setup.py install
- 注意:如果报错:
ImportError:No module named Setuptools
说明python的安装包缺少setuptools包。 - 解决方法:
sudo apt-get install python-setuptools
- 注意:如果报错:
安装Git
在服务端和客户端安装git
sudo apt-get install git sudo apt-get install git-core
配置 git服务器
- 创建git服务器管理用户:
sudo useradd git
- 创建git仓库存储目录:
sudo mkdir /home/workspace/git/
设置git仓库权限:
//将该目录及其子目录设置为管理用户和用户组为git sudo chown -R git:git /home/workspace/git/ //将该目录及其子目录设置为755权限(可参考鸟哥的私房菜) sudo chmod 755 /home/git/repositories
(服务器略过这步)如果在本地安装git,配置对当前用户配置用户信息
git config --global user.name "Name" git config --global user.email "Name@server"
- 复制客户端的ssh公钥到服务器上.建议放到tmp目录下,这样可以避免权限限制带来的问题。
scp ~/.ssh/id_rsa.pub git@Server:/tmp
服务端初始化git server(必须在完成上面安装Gitosis这一步骤后再执行):
sudo -H -u git gitosis-init < /tmp/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/
这个步骤是给超级管理员的电脑授权,授权以后电脑B可以使用git clone命令下载gitosis-admin仓库,这个命令只需要在给超级管理员权限时使用,在增加其他的用户管理权限时,不需要这样做。
修改一个文件的访问权限:
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
- 客户端:同步gitosis-admin到客户端开始管理git server
git clone git@Server:gitosis-admin.git
这样会在当前目录下fork一个gitosis-admin的目录。里面有一个配置文件gitosisi.conf和一个存放pub key的目录keydir。 建立新的库和授权用户
如果要新建库,编辑gitosisi.conf文件,添加
[gitosis] [group gitosis-admin] writable = gitosis-admin members = wsywno1@126.com [group gitosisTest] writable = gitosisTest members = wsywno1@126.com
然后将修改后的内容pull到服务器上:
git add -> git commit -> git push
新建gitosisTest库
mkdir gitosisTest cd gitosisTest git init git add . git commit -a -m "add new project"
建立本地与服务器关联
git remote add origin git@Server:gitosisTest.git
提交本地代码
git push origin master:refs/heads/master
注意:这条命令在超级管理员的机器上面运行,将在服务器上面新创建一个仓库。
至此新的库和对应文件已经上传到server端,其他用户可以git clone git@Server: gitosisTest.git
- 创建git服务器管理用户:
检测一下服务端有没有安装openssh
使用下面指令检查是否安装,我的系统带的有,如有则跳过。
root@XXXXXXXXX:~# ps -e | grep ssh 776 ? 00:00:02 sshd 27157 ? 00:00:00 sshd 28033 ? 00:00:00 sshd
- 如果没有安装,那么安装openssh服务器与客户端工具。
sudo yum install openssh-server openssh-client
- 客户端连接服务端通过ssh登陆:
ssh username@Server
。在我服务器上username是root,Server是wsyw126.cc或者用服务器IP。 - 客户端必须的有ssh,默认Ubuntu都会安装的,大家可以看看22端口是否被监听.
安装GitWeb
如果想在本地版本库看看自己项目的效果,不妨用Git自带的一个命令,可以使用类似lighttpd这样轻量级的web服务器启动一个临时进程。
安装lightpd:
sudo apt-get install lighttpd
启动服务:
git instaweb
这会在1234端口开启一个HTTPD 服务,随之在浏览器中显示该页,十分简单。
关闭服务时,只需在原来的命令后面加上-stop 选项就可以了:
git instaweb –stop
结果如图:
到这里就完成了git server的搭建。
参考资料:
Git官方文档
GitWeb官方文档
Gitosis相关资料
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/52136345
作者:WSYW126