1.服务器上的git
https://git-scm.com/book/tr/v2/Git-on-the-Server-The-Protocols
官网上指出git支持4种协议通信:
1.本地协议
本地协议的仓库在本机,优点是协议简单,缺点是难以通过网络访问;
2.HTTP协议
通过HTTP进行访问,优点是网络适应性强,容易通过互联网访问,缺点是配置复杂,其次对于局域网内应用,会比SSH协议具有更大的网络开销;
3.SSH协议
优点对于局域网内应用,协议简单易部署,缺点是网络适应性差,难以通过互联网访问;
4.Git协议
类似于SSH协议,官网说的优点是快,缺点无法进行认证。由于没有用过,无法评价。
对于本地协议和SSH协议,基本无需部署,只要你的机器能够access到仓库,就可以直接利用git访问。
2. git与http
参照
https://git-scm.com/blog/2010/03/04/smart-http.html
https://git-scm.com/docs/git-http-backend
git提供一个http backend的概念以及apache模块实现,当然除此之外,网上还有基于各种不同语言和框架的git http backend实现,但建议还是使用官方提供的apache2+官方git http back的方式。
3.实现
1.安装apache服务器
sudo apt-get install apache2
2. 修改apache2配置文件
sudo vim /etc/apache2/apache2.conf
3.在文件尾部加入git back end配置
Include sites-enabled/
SetEnv GIT_PROJECT_ROOT /home/pi/Repository
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
这个时候启动apache2服务器,就可以通过http下载服务器代码。但想要上传代码还需要cd到代码仓库进行配置
git config http.receivepack true
关于http backend 的配置参数有3个
参数 | 作用 | 默认值 |
---|---|---|
http.getanyfile | 是否让用户访问所有文件 | true |
http.uploadpack |
是否让用户获取代码版本(fetch-pack)以及 远程版本的引用(ls-remote) |
true |
http.receivepack | 是否接收用户上传(send-pack) | false |
4.加入权限管理(apache.config)
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</LocationMatch>
5.设置认证账户
htpasswd -c /etc/apache2/passwd.git <username>
重启apache2服务
6.修改文件权限或owner
这时候应该可以下载或上传代码到服务器,但可能会有permission文题,只要修改文件所有者为
www-data
或文件权限为777即可实现上传。
chown -R <repository> www-data:www-data
chmod -R <repository> 704
或
chmod -R <repository> 777
完成。