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

完成。



版权声明:本文为hey_zng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hey_zng/article/details/57131670