前言

最近一直在写 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 clonegit pull 这里操作。

配置完成之后,重启 apache2 即可。

service apache2 restart

在远程的计算机上便可以通过 http 的方式 clone 创建在这台服务器上的 git 仓库了。

git clone http://yourip:port/git/yourproject.git

遇到的问题和解决方法

  1. 收到原有搭建的网站影响而不能下载。

    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
  2. 有可能会遇到这样的问题,发现你想要上传代码的时候报错

    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,然后再试着上传代码就可以了!

结尾

其实在 githubgitee 上直接建立 git 仓库是最省事的办法,而且他们也提供了很好的辅助工具。我是刚好在学习 django 的过程中想到了要搭建一个 git 仓库,同时因为部分环境用不了 ssh ,所以就搭建了一个属于自己的 git 服务器。学习新的知识也是个令人愉快的事情,共勉!

参考

progit.pdf

git-http-backend

Git Over Http: Service not enabled: 'receive-pack'

conf 文件配置

在服务器上使用 smart http 搭建 Git 服务器的更多相关文章

  1. 阿里云 linux搭建git服务器

    git是非常方便的版本控制工具,目前网上有很多免费的git仓库可以给我们使用,但是有些时候我们并不放心将我们的项目寄放在别人的服务器上,这个时候就需要自己搭建一个git服务器. 在linux上面搭建g ...

  2. 在Linux上用Apache搭建Git服务器

    在Linux上用Apache搭建Git服务器   最近在学Linux,终于在Linux上用Apache搭建起了Git服务器,在此记录一下. 服务器:阿里云服务器 Linux版本:CentOS 6.5 ...

  3. 如何在服务器上搭建git服务器

    参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...

  4. CentOs上搭建git服务器

    CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...

  5. Ubuntu上搭建Git服务器

    下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用VMware虚拟机安装两台Ubantu系统,分别命名为gitServer和gitClient_01. 1.安装OpenSSH并配置SSH无 ...

  6. Windows平台上使用Github搭建Git服务器的图文教程

    Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到通信协议,例如SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以 ...

  7. 搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  8. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  9. centos 搭建git服务器

    centos 6搭建git服务器 安装 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm yum ins ...

随机推荐

  1. android消息线程和消息队列

    基于消息队列的线程通信:           消息队列与线程循环            MessageQueue:           利用链表来管理消息.                  Mess ...

  2. Java8的新特性--并行流与串行流

    目录 写在前面 Fork/Join框架 Fork/Join框架与传统线程池的区别 传统的线程池 Fork/Join框架 Fork/Join框架的使用 Java8中的并行流 写在前面 我们都知道,在开发 ...

  3. Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解

    CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果. 有童鞋看了之前的文章反馈对AppBarLayout中的scro ...

  4. Paperfolding HDU - 6822

    传送门:https://vjudge.net/problem/HDU-6822 题意:给你一张无限的纸有四种折叠方式,并且在n次折叠后减两刀问最后纸张数量的数学期望. 思路:我们要得到一个通项公式对于 ...

  5. LuckyStar hctf2018

    LuckyStar hctf2018 程序注册有TLS回调函数 char __stdcall TlsCallback_0(int a1, int a2, int a3) { char result; ...

  6. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  7. 使用oracle序列+oracle定时任务获取每月从1开始的流水码

    --创建序列 --入库create sequence rk_seq;--出库create sequence ck_seq;--移库create sequence yk_seq; --创建存储过程 cr ...

  8. JS实现鼠标点击爱心&绘制多边形&每日一言功能

    本篇文章主要介绍我的个人博客 程序猿刘川枫 中页面使用的美化功能(基于JS实现): 1.鼠标点击出现不同颜色爱心特效 2.页面浮动多边形跟随鼠标移动 3.每日一言功能 1.鼠标点击出现爱心特效 经常在 ...

  9. java面试一日一题:java线程池

    问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...

  10. 【洛谷】P1294 高手去散步

    题目背景 高手最近谈恋爱了.不过是单相思."即使是单相思,也是完整的爱情",高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始之前 ...