在服务器上使用 smart http 搭建 Git 服务器
前言
最近一直在写 django 网页的代码,随着代码的量越来越大,管理起来也有点复杂(当然,有在使用 git 进行代码管理)。同时由于有不同的工作环境,有些工作环境对 ssh 的访问有限制,所以想到了在自己的服务器上面搭建 http 协议的 git 仓库。在这里记录一下搭建的过程以及期间遇到的问题和解决方案,以便有需要可以取用。
环境的安装
往下走之前,事先说明一下我的 linux 环境。
我的所有搭建都是建立在树莓派系统Raspbian之上,其他的环境均是根据 apache 的 conf 文件配置 说明所写。
作为主角 git 自然是不能缺少。
sudo apt-get install git
其次是搭建 http 要用到的 apache2。
sudo apt-get install apache2 apache2-utils
apache 配置
启用 apache 模块
配置 apache2.conf
(httpd.conf
) 文件之前需要先启用 mod_cgi, mod_alias,mod_env 等 Apache 模块。
a2enmod cgi alias env
配置 apache2.conf
接下来是配置 apache2.conf
(httpd.conf
),根据 linux 系统的版本有区别。
因为我用的是树莓派,所以配置路径在 /etc/apache2/apache2.conf
。
配置的模板:
SetEnv GIT_PROJECT_ROOT (存放 git 库的文件夹)
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ (git 请求处理器的路径)
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile (授权文件)
Require valid-user
</LocationMatch>
需要添加到配置文件的配置例子:
参考:progit.pdf
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
经过如此配置,已经可以实现 git clone
和 git pull
这里操作。
配置完成之后,重启 apache2 即可。
service apache2 restart
在远程的计算机上便可以通过 http 的方式 clone 创建在这台服务器上的 git 仓库了。
git clone http://yourip:port/git/yourproject.git
遇到的问题和解决方法
收到原有搭建的网站影响而不能下载。
a. 由于我在服务器上搭建了 django 网页,django 网页的过滤器可能会受到/git/
的影响,所以要在 django 中对该 url 不进行处理。
b. 还有一种方法是建立虚拟机映射到其他端口。
这个方法需要将添加的文件囊括在<VirtualHost *:port></VirtualHost>
中,如下<VirtualHost *:8000>
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ <Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory> <LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
</VirtualHost>
同时要在
port.conf
(httpd.conf
) 中加入虚拟机映射的端口的监听:Listen 8000
有可能会遇到这样的问题,发现你想要上传代码的时候报错
E:\Codes\Git\MyWeb>git push
fatal: unable to access 'http://hello.vip/git/MyWeb.git/': The requested URL returned error: 403
这个有可能是因为服务器的 git 库没有更改
http.receivepack
配置,进入你要配置的 git 仓库sudo git config http.receivepack true
,然后再试着上传代码就可以了!
结尾
其实在 github,gitee 上直接建立 git 仓库是最省事的办法,而且他们也提供了很好的辅助工具。我是刚好在学习 django 的过程中想到了要搭建一个 git 仓库,同时因为部分环境用不了 ssh ,所以就搭建了一个属于自己的 git 服务器。学习新的知识也是个令人愉快的事情,共勉!
参考
progit.pdf
git-http-backend
Git Over Http: Service not enabled: 'receive-pack'
conf 文件配置
在服务器上使用 smart http 搭建 Git 服务器的更多相关文章
- 阿里云 linux搭建git服务器
git是非常方便的版本控制工具,目前网上有很多免费的git仓库可以给我们使用,但是有些时候我们并不放心将我们的项目寄放在别人的服务器上,这个时候就需要自己搭建一个git服务器. 在linux上面搭建g ...
- 在Linux上用Apache搭建Git服务器
在Linux上用Apache搭建Git服务器 最近在学Linux,终于在Linux上用Apache搭建起了Git服务器,在此记录一下. 服务器:阿里云服务器 Linux版本:CentOS 6.5 ...
- 如何在服务器上搭建git服务器
参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...
- CentOs上搭建git服务器
CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...
- Ubuntu上搭建Git服务器
下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用VMware虚拟机安装两台Ubantu系统,分别命名为gitServer和gitClient_01. 1.安装OpenSSH并配置SSH无 ...
- Windows平台上使用Github搭建Git服务器的图文教程
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到通信协议,例如SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以 ...
- 搭建Git服务器
在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- centos 搭建git服务器
centos 6搭建git服务器 安装 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm yum ins ...
随机推荐
- spring 最权威的知识点
1.Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方 ...
- MyBatis-Plus【踩坑记录01】
不要使用Mybatis原生的SqlSessionFactory,而应使用MybatisSqlSessionFactory. 原因 依赖关系如下 因此会在使用Mybaits-Plus时默认的时Mybat ...
- 使用 Android Studio 开发 widget 安卓桌面插件
•What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...
- Androi Studio 之 LinearLayout
LinearLayout •常用属性 •注意事项 当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用 a ...
- TypeError: Can't convert 'int' object to str implicitly Python常见错误
尝试连接非字符串值与字符串 想要字符串连接非字符串需要先进行强制转化 可以用str()函数 --------------------------------
- CodeForces CF875C题解
题解 非常有意思的\(2-SAT\)的题. 听学长讲完之后感觉确实容易想到\(2-SAT\),顺理成章. 显然,对于两个串,对咱们来说有意义的显然是两个串中第一个不同的数字.那么,我们假设两个串分别是 ...
- DDOS攻击与防御简单阐述,列出DDOS的攻击方法和防御方法
参考1:https://www.hi-linux.com/posts/50873.html#%E7%BD%91%E7%BB%9C%E5%B1%82-ddos-%E6%94%BB%E5%87%BB 什么 ...
- PhpStorm/WebStorm实用技巧
我常用的IDE设置和功能 1) 使用IDE管理远程主机 Tools -> Deployment -> Browse Remote Host 其中功能十分强大 自己去探索 关键提示: 手动/ ...
- JFX11+IDEA跨平台打包发布的完美解决办法
1 概述 IDEA2020.1的文档中提到只有JFX8的工程才支持打成jar包,并且,如果直接使用Build Artifacts的话,会如下提示: IDEA文档有提到这个的解决办法,是使用一些第三方工 ...
- 14.Quick QML-TextInput详解
1.TextInput属性用来编辑一行文本,对应QLineEdit,除了正常输入外,我们还可以设置echoMode属性改为密码显示状态,也可以通过validator属性和inputMask属性来设置验 ...