4

我刚刚在我的生产服务器上安装了 Git,并希望让 GitWeb 使用它。当我偶然发现一个展示如何使用 git web 工作的教程时,我变得非常感兴趣。

git instaweb -d webrick --start

它的工作原理与教程中的描述完全一样...... http://lostechies.com/jasonmeridth/2009/09/27/git-instaweb/

然而,在阅读了其他论坛之后,似乎 instaweb 并不是真的要使用,而是我应该设置 GitWeb 以在 Apache 上运行。

我对 Apache 还很陌生,所以对我应该做什么不是很熟悉。我一直在关注http://unix-heaven.org/node/31上的教程。但我不认为我需要所有这些。我认为我唯一需要做的就是将以下内容放入我的 httpd.conf 文件中......

<VirtualHost *:80>
    ServerAdmin <a href="mailto:admin@example.org">admin@example.org</a>
    ServerName git.example.org
    ServerAlias git-pub.example.org
    RedirectMatch ^/$ /gitweb.cgi
    SetEnv GITWEB_PROJECTROOT /cvs/codeRepository/git

    Alias /gitweb.js                /srv/www/gitweb/static/gitweb.js
    Alias /gitweb.css               /srv/www/gitweb/static/gitweb.css
    Alias /git-logo.png             /srv/www/gitweb/static/git-logo.png
    Alias /git-favicon.png           /srv/www/gitweb/static/git-favicon.png

    ScriptAlias / "/srv/www/gitweb/"

    <Directory "/srv/www/gitweb/">
        AllowOverride None
        Options Indexes FollowSymLinks ExecCGI
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog "/var/log/apache2/httpd-git-pub.example.org-access.log"
    CustomLog "/var/log/apache2/httpd-git-pub.example.org-error.log" common
</VirtualHost>

其中 /srv/www/gitweb/ 包含....

$:/srv/www/gitweb # ls -ltr
total 252
-rwx------ 1 root root 247917 Feb 27 15:02 gitweb.cgi
drwx------ 2 root root   4096 Feb 27 15:03 static

我在上面指定的配置会起作用还是我需要指定?如果是这样,我将通过什么 url 访问 GitWeb?我需要 serverName、serverAlias 和 serverAdmin 吗?

谢谢你的帮助

4

1 回答 1

2

您将使用的网址是

http://git.example.org

但我不太确定你的配置。我的比较简单,我总是推荐像 http(s)://yourServer/gitweb 这样的地址,而不仅仅是 http(s)://yourServer/:如果你需要添加更多的服务,你可以添加更多的根 url (像/gitweb)。

对于无需身份验证的快速 http 访问:

# GitWeb on 80
Listen 80
<VirtualHost *:80>

  ServerName git.example.org
  ServerAlias git-pub.example.org

  SetEnv GITWEB_PROJECTROOT /cvs/codeRepository/git
  SetEnv GIT_HTTP_BACKEND "/usr/local/apps/git/libexec/git-core/git-http-backend"

  DocumentRoot /srv/www/gitweb
  Alias /gitweb /srv/www/gitweb

  <Directory /srv/www/gitweb>

    Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
    AllowOverride All
    order allow,deny
    Allow from all

    AddHandler cgi-script cgi
    DirectoryIndex gitweb.cgi

  </Directory>

  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

  LogLevel Info
  ErrorLog "/var/log/apache2/gitweb_error_log"
  TransferLog "/var/log/apache2/gitweb_access_log"

</VirtualHost>

注意:在我的原始配置文件(这是一个模板,具有类似的占位符值 @PORT_HTTP_GITWEB@)中,我没有使用GITWEB_PROJECTROOT,因为我正在调用 Gitolite,它知道 Git 存储库在哪里。

不过,根据gitweb 文档,我确实在gitweb.conf文件中设置了一个变量,它的作用与 相同 :GITWEB_PROJECTROOT

 $projectroot::

将添加到项目路径的绝对文件系统路径;存储库的路径是$projectroot/$project.
在安装过程中设置$GITWEB_PROJECTROOT
必须正确设置此变量才能让 gitweb 找到存储库。

例如,通过将以下内容放入 gitweb 配置文件中,将if$projectroot设置为“ ”:/srv/git

----------------------------------------------------------------------------
our $projectroot = "/srv/git";
----------------------------------------------------------------------------

然后:

------------------------------------------------
http://git.example.com/gitweb.cgi?p=foo/bar.git
------------------------------------------------

及其基于 path_info 的等价物

------------------------------------------------
http://git.example.com/gitweb.cgi/foo/bar.git
------------------------------------------------

将映射到文件系统上的路径“/srv/git/foo/bar.git”。


2018 年 8 月更新 Git 2.19(2018 年第三季度,五年后)

" git instaweb" 已调整为在基于 RedHat 的发行版上使用较新的 Apache 运行得更好。

请参阅Sebastian Kisela ( ) 的提交757b124 (2018年 8 月 7 日)和提交 1976311(2018 年 8 月 8 日(由Junio C Hamano 合并——提交 93ded33中,2018 年 8 月 20 日)skisela
gitster

git-instaweb: 使用 apache >= 2.4 修复 apache2 配置

生成的 apache2 配置因 apache >= 2.4 而失败。错误日志指出:

AH00136: Server MUST relinquish startup privileges before accepting connections.  
Please ensure mod_unixd or other system security module is loaded.
AH00016: Configuration Failed

通过加载unixd模块来解决这个问题。
这也适用于旧版本httpd,因此不需要IfVersion条件。(在 CentOS-6 上使用 httpd-2.2.15 测试。)

于 2013-02-27T07:15:14.877 回答