使用Smart HTTP和Gitweb搭建简易个人git服务器
来源:互联网 发布:java mail 附件 io 编辑:程序博客网 时间:2024/05/16 13:02
原文地址:http://particle128.com/posts/2014/12/git-server.html
使用Smart HTTP的git服务器搭建过程
刚接手了老师的一个安卓项目,考虑到实验室闲置了一台PC,决定把这个pc配置成git服务器,用来进行版本控制。以为是分分钟钟的事儿呢,结果用了一整天才搞定。被网上残缺不全的新旧教程整懵了,决定自己写一个。
协议选择
git可以使用五种网络协议进行通信:
- Local:团队成员用不同账户登录同一台电脑,或者共享一个挂载的NFS
语法:git clone /opt/git/project.git
或git clone file:///opt/git/project.git
前者根据是否在同一个文件系统,选择硬链接或拷贝。后者类似网络传输,效率稍低。 - SSH:最常用的方式,使用简单,方便搭建,加密传输+访问认证
语法:git clone ssh://user@server/project.git
或git clone user@server:project.git
- Git Protocol:最快的方式,但是没有认证功能
- HTTP:最兼容的方式,该协议一般不会被防火墙阻隔,有认证没加密
语法:git clone http://server/project.git
- HTTPS:最安全的方式,加密+认证,但效率低(SSL的握手需要6步)
语法:git clone https://server/project.git
因为学校封SSH的22端口,而且有一个同学在校外,排除了SSH协议。HTTPS协议太慢,我们的项目不需要加密数据,排除。GIT协议连认证都没有,太过简陋,排除。不同账户登录一台pc机远程办公,丧失了git作为分布式版本控制系统的优势,排除。
最终,我决定用HTTP协议。用HTTP协议也有两种方式:
- dumb http
- smart http
区别是,dumb http模式中,如果get请求的文件在packfile中,只能请求整个packfile,即使你需要的只有其中的一个文件。另外一方面,smart http模式中,在http服务器后面,又加了一层CGI,叫git-http-backend,它会像git或ssh协议那样,当请求到来后,把需要的文件,从各个packfile中抽取,然后组成一个自定义packfile后再传给客户端。
故选择Smart HTTP。既然都用HTTP协议了,干脆把gitweb也配出来,方便通过浏览器查看git的版本库。下面是配置过程。
配置过程
1、软硬件环境
- Pentium Dual-Core CPU,32 bits
- ubuntu 12.04 LTS
- apache 2.4.7
- git 1.9.1
apache2、git、gitweb的安装:
2、创建git库
我选择在/srv/目录下创建一个bare repo,叫test.git,并把该目录下所有文件的所有者和组都改成www-data(apache2的默认所有者和默认组),以便apache2有权限访问它。
3、配置apache2
apache2的总配置文件是/etc/apache2/apache2.conf,它会读取/etc/apache2/sites-enabled/下的配置文件。而该目录下的文件,一般是/etc/apache2/sites-available/下配置文件的软链接。
打开/etc/apache2/apache2.conf,在最后添加如下内容。每条命令的解释,见注释。
4、push操作的认证
默认git-http-backend的upload-pack是被置为真的,即可以执行git clone/pull/fetch。但是,默认receive-pack是被置为false,即不能git push。为了支持带认证的git push,需要两步操作。
第一步,打开/srv/test.git/config,添加如下内容:
如果不加上面这句,git clone下来的版本库,git push时会提示403错误,即没有授权。
第二步,生成一个包含用户名和密码的文件,该文件能被apache2读取,作为文件认证的依据。假设我要添加两个用户mashu和ouyang,密码在提示下输入,我要执行如下命令:
有了这个文件,添加到上面的apache2的配置文件中即可。
5、gitweb的配置
修改/etc/gitweb.conf中的一句:
6、重启apache2
7、客户端检查
在客户端电脑上,找一个目录,执行如下命令
然后,在浏览器上输入http://server-ip,查看刚才的操作是否记录到gitweb上了。
参考
- 使用SSH协议的git服务器搭建
- Git on the Server
- Smart Http
- git-http-backend Manual
- bug:403 Forbidden on front page with apache 2.4
- 使用Smart HTTP和Gitweb搭建简易个人git服务器
- Ubuntu10.04搭建Git服务器和GitWeb
- Ubuntu10.04搭建Git服务器和GitWeb
- Ubuntu10.04搭建Git服务器和GitWeb
- Ubuntu搭建Git服务器和GitWeb
- git 服务器搭建 (git smart http)
- UbuntuServer搭建Git服务器之gitdeamon和gitweb(四)
- CentOS 6.5下GIT服务器、gitweb搭建
- CentOS 6.5下GIT服务器、gitweb搭建
- gitosis + apache2 + gitweb搭建git服务器
- ubuntu apache服务器和gitweb服务器搭建
- 简易搭建http服务器
- 利用apache2+gitolite+gitweb搭建git服务器的详细步骤
- Fedora 12 ftp,http及GitWeb服务器搭建(网页版)
- 4.6 服务器上的 Git - Smart HTTP
- git 服务器搭建和使用
- Git服务器搭建和使用
- 使用 Node.js 和 Express.js 搭建简易 HTTP/2 服务器
- 正则表达式(二)
- 二分查找法
- C#控件属性设置
- [小雅轩观点]003谈声明与定义
- AngularJS—AngularJs项目实践总结
- 使用Smart HTTP和Gitweb搭建简易个人git服务器
- IDE Android studio Eclipse
- 欢迎使用CSDN-markdown编辑器
- 自己实现一下ArrayList
- 数据库常用数据类型
- 微信小程序-初识小程序架构骨架
- 485 Max Consecutive Ones
- oj2839: 改错题B-迷宫的秘密机关
- 使用python查找目录下特定后缀名的文件