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
,我们可以看到还有另外两个配置候选:
/etc/gitweb-common.conf
(GITWEB_CONFIG_COMMON
)/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);
}
我们可以得出这样的结论:
/etc/gitweb-common.conf
总是被读/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