gitweb 拒绝责怪

gitweb 拒绝责怪

git instaweb我正尝试在我的 Debian 服务器上的项目目录中获取 gitweb(git 1.8.4.2,通过)来提供指责视图。

在我的/etc/gitweb.conf

… # default logo, favicon, etc. settings

$feature{'blame'}{'default'} = [1];
$feature{'pickaxe'}{'default'} = [1];
$feature{'snapshot'}{'default'} = ['tgz', 'txz', 'zip'];
$feature{'highlight'}{'default'} = [1];
$feature{'pathinfo'}{'default'} = [1];

在我的全局配置文件中:

[gitweb]
    blame = true
    snapshot = tgz, txz, zip
    patches = 256
    avatar = gravatar
[instaweb]
    local = false
    httpd = apache2 -f
    port = 4321

在我的项目.git/config文件中:

[gitweb]
        blame = true

然而,当我尝试加载 git blame 视图时(通过手动修改 URL 为http://myserversip:4321/?p=.git;a=blame;f=Tests/InchCoordProxyTests.m;h=b4b2…;hb=53b4,因为追责行动链接不会显示)

快速搜索“不允许指责观点gitweb.cgi源中的这句话明确表明gitweb_check_feature('blame')条件不成立。


我究竟做错了什么?

或者,有没有办法详细地打印出 gitweb 执行其操作的原因(例如,读取了哪些配置文件,从每个文件加载了哪些设置等)?

答案1

看着git-instaweb.sh,它似乎没有读取/etc/gitweb.conf但是$GIT_DIR/gitweb/gitweb_config.perl,所以您需要编辑该文件。

答案2

为了使其与 instaweb 配合使用,我改为执行以下操作。也许自定义脚本或别名会有所帮助。

git instaweb
cat >> .git/gitweb/gitweb_config.perl <<'EOF'
$feature{'highlight'}{'default'} = [1];
$feature{'blame'}{'default'} = [1];
EOF

只需知道,下次 instaweb 启动时它将覆盖该文件,并且需要再次附加您的自定义内容。

答案3

我最近在处理 OpenSUSE Tumbleweed 中的 AppArmour 问题时发现了类似的问题。

git instaweb将创建并覆盖配置文件.git/gitweb/gitweb_config.perl($GITWEB_CONFIG),因此无法在此处存储配置。

查看gitweb.cgi,我们可以看到还有另外两个配置候选:

  1. /etc/gitweb-common.confGITWEB_CONFIG_COMMON
  2. /etc/gitweb.conf$GITWEB_CONFIG_SYSTEM

相关代码如下:

sub evaluate_gitweb_config {
    our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "/etc/gitweb.conf";
    our $GITWEB_CONFIG_SYSTEM = $ENV{'GITWEB_CONFIG_SYSTEM'} || "/etc/gitweb.conf";
    our $GITWEB_CONFIG_COMMON = $ENV{'GITWEB_CONFIG_COMMON'} || "/etc/gitweb-common.conf";

    # Protect against duplications of file names, to not read config twice.
    # Only one of $GITWEB_CONFIG and $GITWEB_CONFIG_SYSTEM is used, so
    # there possibility of duplication of filename there doesn't matter.
    $GITWEB_CONFIG = ""        if ($GITWEB_CONFIG eq $GITWEB_CONFIG_COMMON);
    $GITWEB_CONFIG_SYSTEM = "" if ($GITWEB_CONFIG_SYSTEM eq $GITWEB_CONFIG_COMMON);

    # Common system-wide settings for convenience.
    # Those settings can be overridden by GITWEB_CONFIG or GITWEB_CONFIG_SYSTEM.
    read_config_file($GITWEB_CONFIG_COMMON);

    # Use first config file that exists.  This means use the per-instance
    # GITWEB_CONFIG if exists, otherwise use GITWEB_SYSTEM_CONFIG.
    read_config_file($GITWEB_CONFIG) and return;
    read_config_file($GITWEB_CONFIG_SYSTEM);
}

我们可以得出这样的结论:

  1. /etc/gitweb-common.conf总是被读
  2. /etc/gitweb.conf.git/gitweb/gitweb_config.perl如果已读则永不被读取。

这样,放置持久配置的唯一地方就是/etc/gitweb-common.conf(或$GITWEB_CONFIG_COMMON)。

长话短说,将/etc/gitweb.conf文件重命名为/etc/gitweb-common.conf,然后重试。

但是,请注意,你的发行版可能与 AppArmour 存在问题,就像我的发行版一样。如果是这种情况,请参阅此帖子中有关如何解决此问题的详细信息:OpenSUSE Tumbleweed 上的问题git instaweb:未读取 /etc/gitweb-common.conf

相关内容