`
tomhibolu
  • 浏览: 1430634 次
文章分类
社区版块
存档分类
最新评论

Window下使用msysgit和apache配置Git服务

 
阅读更多
  • 网上的东西太乱太杂,只好静下来了,从最基本的地方,一点一点来。尽量确保自己写的每一行东西确实努力去弄懂了

安装

在Windows下需要的就是msysgit了,机器上现在安装的是

我们关心的主要是

D:\Program Files\Git\libexec\git-core\git-http-backend.exe

注意:

  • 该程序需要libiconv-2.dll这个动态库,如果系统PATH路径中没有该文件,可以从Git安装目录下的bin目录中拷贝一个进来。

  • 对我来说,当前系统PATH内有D:/MinGW/bin,该目录内有这个动态库。故不需要拷贝了

系统中当前apache版本信息:

  • Apache/2.2.15(Win32)DAV/2SVN/1.6.6mod_wsgi/3.3Python/2.7

这个没什么可说的。直接在官网下载安装即可。

创建仓库

选择一个目录D:\ImportantData\git

git init --bare Test.git

然后期待通过

git http://127.0.0.1/git/Test.git

来访问这个软件仓库

httpd.conf 第一次配置

网上搜到的东西太多了,还是从最根本的看起:

  • 设置仓库的根目录
  • 映射路径到我们的CGI程序:git-http-backend.exe
  • 还有一个次要的 GIT_HTTP_EXPORT_ALL,如果不设置它的话,我们必须在每一个仓库中放置一个名为git-daemon-export-ok的文件才行

SetEnv GIT_PROJECT_ROOT D:/ImportantData/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "D:/Progra~1/Git/libexec/git-core/git-http-backend.exe/"

然后,设置路径的访问权限

  • 我们的CGI程序的路径
  • 我们仓库所在的路径

<Directory "D:/Program Files/Git/libexec/git-core/">
  Allow From All
</Directory>
<Directory "D:/ImportantData/git">
  Allow From All
</Directory>

效果

现在我们可以通过http来clone仓库了:

git clone http://127.0.0.1/git/Test.git

fetch和pull也都没问题,但是我们不能push

upload 与 receive

http-backend提供了两个服务:

服务

允许你

默认

upload-pack

git fetch
git pull
git clone

开启

receive-pack

git push

关闭

要想能匿名push,我们需要开启recieve-pack服务,可通过修改仓库的config文件可以实现:

[http]
  receivepack = true

当然,同样的方式,我们也可以关闭upload-pack服务。

这样一来,pull 和 push 都没问题了。第一阶段结束

httpd.conf 第二次配置

匿名pull和push应该不是我们需要的,一般来说,应该是允许:

  • 匿名用户可以pull
  • 验证用户才可以push

和前面一样,基本设置不变

SetEnv GIT_PROJECT_ROOT D:/ImportantData/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ "D:/Progra~1/Git/libexec/git-core/git-http-backend.exe/"
<Directory "D:/Program Files/Git/libexec/git-core/">
  Allow From All
</Directory>
<Directory "D:/ImportantData/git">
  Allow From All
</Directory>

但我们对请求receive-pack的url路径进行限制

<LocationMatch "^/git/.*/git-receive-pack$">
  AuthType Basic 
  AuthName "Git repository" 
  AuthUserFile D:/ImportantData/Repositories/htpasswd 
  Require valid-user 
  Allow From All
</LocationMatch>
  • 路径之所以这样,是因为我们gitpush时,http请求的格式大致是:

"POST /git/Test.git/git-upload-pack HTTP/1.1"
  • 我们使用Basic的方式认证
    • 密码文件放置在了D:/ImportantData/Repositories/htpasswd,和原来的SVN服务使用的相同。

    • 密码文件可以使用htpasswd创建和修改

这样一来,只有通过验证的用户才可以push了(clone仓库时可以直接指定用户名):

git clone http://dbzhang800@127.0.0.1/git/Test.git

httpd.conf 第三次配置

接前面的第二配置,如果也要禁用匿名用户的clone等操作怎么办?和push类似,只需要通过Location控制下面的HTTP请求路径即可:

"POST /git/Test.git/git-upload-pack HTTP/1.1"

但是,这个还阻止不了pullfetch操作,因为它们HTTP头部是

"GET /git/Test.git/info/refs?service=git-upload-pack HTTP/1.1"

所以也要一块处理。

但是,实际上,我们可能只有部分私密仓库才需要这么设置。这时,我们可以直接控制某个仓库的路径就行了

  • 比如,要控制我们以/git/Test开头的仓库路径:

<Location /git/Test>
    AuthType Basic 
    AuthName "Git repository" 
    AuthUserFile D:/ImportantData/Repositories/htpasswd 
    Require valid-user 
</Location>

httpd.conf 第四次配置

前面我们一直使用的

ScriptAlias /git/ "D:/Progra~1/Git/libexec/git-core/git-http-backend.exe/"

还可以用下面的东西来替换(而保持功能不变):

ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \
                        "D:/Program Files/Git/libexec/git-core/git-http-backend.exe/$1"

这后这么复杂有什么好处么?

好处就是,这使得 git-http-backend.exe 这个东西只处理这些匹配的路径。而不会处理其他的,比如像

http://127.0.0.1/git/goodbyeGit

这样的路径。这样的路径可以进一步交由其他CGI程序处理。比如gitweb.cgi

httpd.conf 第五次配置

配置gitweb

在前面的基础上

  • 添加上gitweb.cgi这个脚本
  • 并设置其所在目录的权限

ScriptAliasMatch \
        "(?x)^/git/(.*/(HEAD | \
                        info/refs | \
                        objects/(info/[^/]+ | \
                                 [0-9a-f]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                        git-(upload|receive)-pack))$" \
                        "D:/Program Files/Git/libexec/git-core/git-http-backend.exe/$1"
ScriptAlias /git/ "D:/Progra~1/Git/share/gitweb/gitweb.cgi/"

<Directory "D:/Program Files/Git/share/gitweb/">
  Options +ExecCGI
  Allow From All
</Directory>

由于在Windows下,还需要将该cgi脚本第一行改成我们Perl程序所在路径,比如:

这样就差不多了,而至于gitweb如何配置,额,我还不清楚。只是注意到可以直接修改这个 gitweb.cgi 文件中的:

our $GIT = "git";
our $projectroot = "D:/ImportantData/git";
...

参考


分享到:
评论

相关推荐

    msysGit 和TortoiseGit配置本地GIT服务

    msysGit 和TortoiseGit配置本地GIT服务, 1. 把msysGit压缩包释放到合适目录,无需安装 2. 安装TortoiseGit,安装过程中会询问要使用的 SSH 客户端,选择默认的 TortoisePLink,如图:

    windows下git工具msysgit与TortoiseGit

    总的来说,Windows下的msysGit和TortoiseGit为开发者和非开发者提供了便利的Git环境,无论你是代码新手还是经验丰富的程序员,都能有效地管理和协作项目代码。它们是Windows用户接触和深入理解Git的绝佳选择,尤其是...

    MsysGit (Git Bash )

    1. **Git命令行工具**:MsysGit包含了一整套Git的命令行工具,如`git clone`、`git add`、`git commit`、`git push`等,用户可以在Windows环境下使用这些命令进行版本控制操作。 2. **Git Bash shell**:Git Bash是...

    msysgit(Git for Windows)V2.13.3 64bit

    Git for Windows,以msysGit形式提供的Git工具,是Windows用户使用Git版本控制系统的主要途径。...然而,在无法获取更新版本的情况下,msysGit 2.13.3 64-bit仍然能够提供可靠且功能丰富的Git服务。

    以Copssh和msysgit在winxp上架设git服务器

    在Windows XP上架设Git服务器,我们可以选择两种不同的方案,分别是使用Copssh和msysgit的方案1,以及使用cygwin和gitolite的方案2。这两种方案各有其特点和适用场景。 **一、方案1:Copssh + msysgit** Copssh是...

    GIT服务器的搭建与使用

    在服务端,安装Msysgit和Copssh之后,客户端可以通过SSH连接到服务器,但此时还不能直接使用Git命令。需要执行一些额外的配置步骤,包括将Msysgit的几个关键执行文件复制到Copssh的bin目录下,同时需要将Msysgit下的...

    Windows下搭建基于ssh的git服务器

    Windows下搭建基于ssh的git服务器 本文将讲解如何在Windows下...本文总结了Windows下搭建基于ssh的git服务器的整个过程,涵盖了msysgit、copssh和Git的安装、配置和使用等方面的知识点,具有很强的实践性和参考价值。

    Windows下搭建基于ssh的git服务器教程.doc

    本文将指导读者在 Windows 环境下搭建基于 SSH 的 Git 服务器,使用 msysgit 和 copssh 软件实现 Git 服务器的搭建和配置。 一、安装必要软件 在开始搭建 Git 服务器之前,需要安装两个软件:msysgit 和 copssh。...

    windows下GIT工具 msysgit win7 64位可用

    本文将深入探讨msysGit在Windows 7 64位环境下的安装、配置和使用。 标题提及的"windows下GIT工具 msysgit win7 64位可用",意味着该工具在Windows 7操作系统64位版本上经过验证,可以稳定运行。msysGit项目旨在为...

    64位中文GIT服务器

    "64位中文Git服务器"指的是在64位操作系统环境下,并且支持中文界面的Git服务环境。这个压缩包文件可能包含了实现这一功能所需的重要组件。 Git-2.11.0-64-bit.exe 是Git客户端的安装程序,适用于64位操作系统。这...

    WINDOWSXP下使用copSSH配置GIT服务器+TortiseGIT客户端1

    ### Windows XP下使用copSSH配置GIT服务器及TortiseGit客户端详细步骤 #### 一、概述 在Windows XP环境下配置Git服务器以及客户端是一项常见的需求,尤其是对于那些希望在内部网络中进行版本控制管理的团队来说。...

    msysgit(Git for Windows)V2.16.3 64bit

    这个软件包,特别是"msysgit(Git for Windows)V2.16.3 64bit",提供了64位架构下的Git环境,适用于Windows操作系统用户。Git是一款分布式版本控制系统,由Linus Torvalds为Linux内核开发,现已成为全球软件开发者...

    git客户端和使用手册,msysgit,tortoisegit

    msysGit是Windows环境下Git的移植版,提供了一个命令行界面来使用Git。它包括了Git的所有核心功能,允许开发者在Windows操作系统上执行Git命令,如`git clone`, `git add`, `git commit`, `git push`等。msysGit通过...

    Windows下搭建基于ssh的git服务器[整理].pdf

    在配置完成必备软件和配置 Git 和 copssh 后,终于可以实现基于 ssh 的 Git 服务器了。使用私钥登陆 ssh 服务器,并使用 Git 命令来管理版本库。 四、解决问题 在使用基于 ssh 的 Git 服务器时,可能会遇到一些...

    git安装配置以及在intellijidea中使用git的配置.pdf

    Git 的安装与配置是使用 Git 的基础,以下将详细介绍各个操作系统的安装步骤及在 IntelliJ IDEA 中的配置。 在 Linux 上安装 Git,通常可以通过包管理器进行,如在 Debian 或 Ubuntu 系统上使用 `sudo apt-get ...

    windows 安装git教程

    现在,我们已经配置好了 Git 环境,可以开始使用 Git 了。下面是一个基本的使用示例: 克隆已有版本库 右键点击任意目录,选择 "Git Gui",然后输入以下命令: ``` git clone git@87.5.16.32:tutorial.git ``` 这...

    Windows下使用msysgit下载Android代码

    在Windows环境下,使用msysGit下载Android代码是一个常见的任务,尤其对于开发者来说是必不可少的步骤。msysGit是一个提供Linux命令行工具的Windows版本,它允许用户在Windows系统上使用Git进行版本控制操作,包括...

    WindowsXP下搭建Git服务器 1

    在Windows环境下,推荐使用msysGit,它是Git在Windows上的移植版。你可以从http://code.google.com/p/msysgit/下载最新版本,如Git-1.7.8-pre。安装过程相对简单,完成后,你可以通过Git bash在命令行模式下执行Git...

    git服务器安装使用

    - **OpenSSH for Windows**:CopSSH - 用于提供 SSH 服务,以便远程访问和管理 Git 仓库。 ##### 安装步骤 1. **Git安装**:安装 MsysGit,一般情况下选择默认安装选项即可。 2. **CopSSH安装**:安装并配置 ...

    Git 管理工具和操作文档(msysgit for windows)

    在Windows环境下,一个常用的Git实现是msysGit,它提供了Git命令行工具和图形用户界面,使得Windows用户可以方便地使用Git。 msysGit是一个为Windows平台设计的Git环境,它包括了Git的命令行工具和一些必要的Unix...

Global site tag (gtag.js) - Google Analytics