gitweb
Имя
gitweb — Веб-интерфейс Git (веб-фронтенд для Git-репозиториев)
Синтаксис
Для начала работы с gitweb запустите git-instaweb[1] из Git-репозитория. Это настроите и запустит ваш веб-сервер, и запустит веб-браузер, указывая адрес gitweb.
Описание
Gitweb предоставляет веб-интерфейс к Git-репозиториям. Его возможности включают:
-
Просмотр нескольких Git-репозиториев с общим корнем.
-
Просмотр каждой ревизии репозитория.
-
Просмотр содержимого файлов в репозитории в любой ревизии.
-
Просмотр журнала ревизий ветвей, истории файлов и каталогов, просмотра изменений, когда и кем они были внесены.
-
Просмотр подробностей blame/аннотации любого файла (если включено).
-
Генерация RSS и Atom лент коммитов для любой ветви. Ленты автоматически обнаруживаются современными веб-браузерами.
-
Просмотр всех изменений в ревизии и переход к ревизиям по одной за раз, просмотр истории репозитория.
-
Поиск коммитов, сообщения коммитов которых соответствуют заданному поисковому запросу.
См. https://repo.or.cz/w/git.git/tree/HEAD:/gitweb/ для исходного кода gitweb, просматриваемого с помощью самого gitweb.
Настройка
Различные аспекты поведения gitweb можно контролировать через файл конфигурации gitweb_config.perl или /etc/gitweb.conf. Подробности см. в gitweb.conf[5].
Репозитории
Gitweb может отображать информацию из одного или нескольких Git-репозиториев. Эти репозитории должны находиться на локальном файловом хранилище и иметь общий корень репозитория, то есть все они должны находиться под одним родительским репозиторием (но см. также раздел «Расширенная настройка веб-сервера», подраздел «Настройка веб-сервера с несколькими корнями проектов»).
our $projectroot = '/path/to/parent/directory';
Значение по умолчанию для $projectroot — /pub/git. Вы можете изменить его во время сборки gitweb с помощью переменной конфигурации сборки GITWEB_PROJECTROOT.
По умолчанию все Git-репозитории в $projectroot отображаются и доступны gitweb. Список проектов по умолчанию генерируется путем сканирования каталога $projectroot на предмет Git-репозиториев (точнее, баз данных объектов; gitweb не интересует рабочая область и лучше всего подходит для отображения «голых» репозиториев).
Имя репозитория в gitweb — это путь к его $GIT_DIR (его базе данных объектов) относительно $projectroot. Таким образом, репозиторий $repo можно найти по адресу "$projectroot/$repo".
Формат файла списка проектов
Вместо того, чтобы gitweb находил репозитории, сканируя файловую систему, начиная с $projectroot, вы можете предоставить предварительно сгенерированный список видимых проектов, установив $projects_list на указание на текстовый файл со списком проектов (с дополнительной информацией).
Этот файл использует следующий формат:
-
Одна запись (для проекта/репозитория) на строке; продолжение строк (экранирование новой строки) не поддерживается.
-
Лидирующие и заключительные пробелы игнорируются.
-
Поля, разделенные пробелами; любой пробел может быть использован в качестве разделителя полей (правила для «
split(" ", $line)» Perl). -
Поля используют модифицированное кодирование URI, определенное в RFC 3986, раздел 2.1 (Percent-Encoding), или, скорее, «кодирование строки запроса» (см. https://en.wikipedia.org/wiki/Query_string#URL_encoding), разница заключается в том, что SP (« ») может быть закодирован как «+» (и поэтому «+» также должен быть закодирован в процентах).
Зарезервированные символы: «%» (используется для кодирования), «+» (может использоваться для кодирования пробела), все символы пробела, как определено в Perl, включая SP, TAB и LF, (используются для разделения полей в записи).
-
В настоящее время распознаются следующие поля:
- <путь к репозиторию>
-
путь к репозиторию GIT_DIR, относительно
$projectroot - <владелец репозитория>
-
отображается как владелец репозитория, предпочтительно полное имя или адрес электронной почты, или оба
Вы можете сгенерировать файл индекса списка проектов с помощью действия project_index (ссылка TXT на странице списка проектов) непосредственно из gitweb; см. также раздел «Генерация списка проектов с помощью gitweb» ниже.
Пример содержимого:
foo.git Joe+R+Hacker+<joe@example.com> foo/bar.git O+W+Ner+<owner@example.org>
По умолчанию этот файл управляет только тем, какие проекты отображаются на странице списка проектов (обратите внимание, что записи, которые не указывают на правильно распознанные Git-репозитории, не будут отображаться gitweb). Даже если проект не отображается на странице списка проектов, вы можете просмотреть его вручную, создав URL gitweb. Установив переменную конфигурации $strict_export (см. gitweb.conf[5]) в истинное значение, можно разрешить просмотр только тех репозиториев, которые также отображаются на странице обзора (т. е. доступны только проекты, явно указанные в файле списка проектов).
Генерация списка проектов с помощью gitweb
Предполагается, что GITWEB_CONFIG имеет значение по умолчанию Makefile, а именно gitweb_config.perl. Поместите следующее в файл gitweb_make_index.perl.
read_config_file("gitweb_config.perl");
$projects_list = $projectroot; Затем создайте следующий скрипт для получения списка проектов в формате, подходящем для переменной конфигурации сборки GITWEB_LIST (или переменной $projects_list в конфигурации gitweb):
#!/bin/sh export GITWEB_CONFIG="gitweb_make_index.perl" export GATEWAY_INTERFACE="CGI/1.1" export HTTP_ACCEPT="*/*" export REQUEST_METHOD="GET" export QUERY_STRING="a=project_index" perl -- /var/www/cgi-bin/gitweb.cgi
Запустите этот скрипт и сохраните его вывод в файл. Этот файл можно использовать в качестве файла списка проектов, что означает, что вы можете установить $projects_list на его имя файла.
Управление доступом к Git-репозиториям
По умолчанию все Git-репозитории в $projectroot видны и доступны gitweb. Однако вы можете настроить, как gitweb управляет доступом к репозиториям.
-
Как описано в разделе «Формат файла списка проектов», вы можете контролировать, какие проекты видны, выборочно включая репозитории в файл списка проектов и установив переменную конфигурации gitweb
$projects_listдля указания на него. При установке$strict_export, файл списка проектов можно использовать для управления тем, какие репозитории доступны. -
Вы можете настроить gitweb так, чтобы он отображал и разрешал просмотр только явно экспортируемых репозиториев, с помощью переменной
$export_okв файле конфигурации gitweb; см. справку gitweb.conf[5]. Если она имеет истинное значение, gitweb отображает репозитории только если в его базе данных объектов существует файл с именем$export_ok(если директория содержит магический файл с именем$export_ok).Например, git-daemon[1] по умолчанию (если не используется опция
--export-all) позволяет забирать только те репозитории, которые имеют файлgit-daemon-export-ok. Добавлениеour $export_ok = "git-daemon-export-ok";
заставляет gitweb отображать и разрешать доступ только к тем репозиториям, которые можно получить через протокол
git://. -
Наконец, можно указать произвольную подпрограмму Perl, которая будет вызываться для каждого репозитория, чтобы определить, можно ли его экспортировать. Подпрограмма получает абсолютный путь к проекту (репозиторию) в качестве единственного параметра (т. е. "$projectroot/$project").
Например, если вы используете mod_perl для запуска скрипта и настроили аутентификацию протокола dumb HTTP для ваших репозиториев, вы можете использовать следующий хук для разрешения доступа только в том случае, если пользователь имеет право читать файлы:
$export_auth_hook = sub { use Apache2::SubRequest (); use Apache2::Const -compile => qw(HTTP_OK); my $path = "$_[0]/HEAD"; my $r = Apache2::RequestUtil->request; my $sub = $r->lookup_file($path); return $sub->filename eq $path && $sub->status == Apache2::Const::HTTP_OK; };
Настройка gitweb для каждого репозитория
Вы можете настроить отдельные репозитории, отображаемые в gitweb, создав файл в каталоге GIT_DIR Git-репозитория или установив переменную конфигурации репозитория (в GIT_DIR/config, см. git-config[1]).
В репозитории вы можете использовать следующие файлы:
- README.html
-
Файл HTML (фрагмент HTML), который включается на странице «обзора» проекта gitweb внутри элемента блока
<div>. Его можно использовать для более подробного описания проекта, для добавления ссылок (например, на домашнюю страницу проекта) и т. д. Он распознается только при отключенной защите от XSS ($prevent_xssимеет ложное значение, см. gitweb.conf[5]); в будущем может быть разработан способ безопасного включения README при включенной защите от XSS. - описание (или
gitweb.description) -
Краткое (сокращенное до
$projects_list_description_widthна странице списка проектов, что по умолчанию составляет 25 символов; см. gitweb.conf[5]) описание проекта (репозитория) в одну строку. Текстовый файл; HTML будет экранирован. По умолчанию устанавливаетсяUnnamed repository; edit this file to name it for gitweb.
из шаблона во время создания репозитория, обычно установленного в
/usr/share/git-core/templates/. Можно использовать переменную конфигурации репозиторияgitweb.description, но файл имеет приоритет. - категория (или
gitweb.category) -
Категория проекта в одну строку, используемая для группировки проектов, если
$projects_list_group_categoriesвключена. По умолчанию (файл и переменная конфигурации отсутствуют) некатегорированные проекты помещаются в категорию$project_list_default_category. Вы можете использовать переменную конфигурации репозиторияgitweb.category, но файл имеет приоритет.Переменные конфигурации
$projects_list_group_categoriesи$project_list_default_categoryописаны в gitweb.conf[5] - cloneurl (или многозначное
gitweb.url) -
Файл с URL репозитория (используется для клонирования и получения), по одному на строке. Отображается на странице сводки проекта. Вы можете использовать многозначную переменную конфигурации репозитория
gitweb.urlдля этого, но файл имеет приоритет.Это усовершенствование/версия для каждого репозитория глобальной переменной конфигурации gitweb на основе префикса
@git_base_url_list(см. gitweb.conf[5]). - gitweb.owner
-
Вы можете использовать переменную конфигурации репозитория
gitweb.ownerдля установки владельца репозитория. Он отображается на странице списка и сводки проекта.Если она не установлена, используется владелец каталога файловой системы (через поле GECOS, т. е. поле реального имени из getpwuid(3)), если
$projects_listне установлено (gitweb сканирует$projectrootв поисках репозиториев); если$projects_listуказывает на файл со списком репозиториев, то владелец проекта по умолчанию — значение из этого файла для данного репозитория. - различные
gitweb.*переменные конфигурации (в конфигурации) -
Прочитайте описание хеша
%featureдля получения подробного списка и описаний. См. также раздел «Настройка функций gitweb» в gitweb.conf[5].
Действия и URL-адреса
Gitweb может использовать URL-адреса на основе path_info (компонента) или передавать всю необходимую информацию через параметры запроса. Типичные URL-адреса gitweb разбиваются на пять компонентов:
.../gitweb.cgi/<repo>/<action>/<revision>:/<path>?<arguments>
- repo
-
Репозиторий, на котором будет выполнено действие.
Все действия, кроме тех, которые перечисляют все доступные проекты в любой форме, требуют этого параметра.
- action
-
Действие, которое будет выполнено. По умолчанию
projects_listесли repo не задан иsummaryв противном случае. - revision
-
Показывать версию. По умолчанию HEAD.
- path
-
Путь внутри <repository>, на котором выполняется действие для тех действий, которые его требуют.
- arguments
-
Любые аргументы, которые контролируют поведение действия.
Некоторые действия требуют или позволяют указать две версии, а иногда даже два имени путей. В самом общем виде URL-адрес gitweb, основанный на path_info (компоненте), выглядит так:
.../gitweb.cgi/<repo>/<action>/<revision-from>:/<path-from>..<revision-to>:/<path-to>?<arguments>
Каждое действие реализуется как подпрограмма и должно присутствовать в хэше %actions. Некоторые действия по умолчанию отключены и должны быть включены с помощью механизма функций. Например, чтобы включить blame представление, добавьте следующее в файл конфигурации gitweb:
$feature{'blame'}{'default'} = [1]; Действия:
Стандартные действия:
- project_list
-
Выводит список доступных Git-репозиториев. Это команда по умолчанию, если в URL не указан репозиторий.
- summary
-
Отображает сводку о заданном репозитории. Это команда по умолчанию, если в URL не указано действие, а указан только репозиторий.
- heads
- remotes
-
Выводит список всех локальных или всех отслеживаемых удаленных ветвей в данном репозитории.
Последний не доступен по умолчанию, если не настроен.
- tags
-
Перечисляет все теги (легковесные и аннотированные) в данном репозитории.
- blob
- tree
-
Отображает файлы и каталоги в заданном пути репозитория в заданной версии. Это команда по умолчанию, если в URL не указано действие, а указан путь.
- blob_plain
-
Возвращает исходные данные файла в заданном репозитории, в заданном пути и версии. Ссылки на это действие помечены
raw. - blobdiff
-
Отображает разницу между двумя версиями одного и того же файла.
- blame
- blame_incremental
-
Отображает информацию об ответственности (также называемой аннотацией) для файла. На каждой строке отображается версия, в которой эта строка была в последний раз изменена, и пользователь, который внес изменения.
Инкрементная версия (которая, если настроена, используется автоматически при включенном JavaScript) использует Ajax для постепенного добавления информации об ответственности в содержимое заданного файла.
Это действие отключено по умолчанию по соображениям производительности.
- commit
- commitdiff
-
Отображает информацию о конкретном коммите в репозитории.
commitпредставление отображает информацию о коммите более подробно,commitdiffдействие отображает набор изменений для данного коммита. - patch
-
Возвращает коммит в простом текстовом формате почты, подходящем для применения с git-am[1].
- tag
-
Отображает конкретный аннотированный тег (объект тега).
- log
- shortlog
-
Отображает информацию о логах (сообщение коммита или только предмет коммита) для заданной ветки (начиная с заданной версии).
shortlogпредставление более компактное; оно показывает один коммит на строке. - history
-
Отображает историю файла или каталога в заданном пути репозитория, начиная с заданной версии (по умолчанию HEAD, т.е. ветка по умолчанию).
Это представление аналогично
shortlogпредставлению. - rss
- atom
-
Генерирует ленту RSS (или Atom) изменений в репозитории.
Настройка веб-сервера
В этом разделе объясняется, как настроить некоторые распространенные веб-серверы для работы с gitweb. Во всех случаях, /path/to/gitweb в примерах — это каталог, в котором вы установили gitweb, и содержит gitweb_config.perl.
Если вы настроили веб-сервер, который здесь не указан для gitweb, пожалуйста, отправьте инструкции, чтобы они могли быть включены в будущие релизы.
Apache как CGI
Apache должен быть настроен для поддержки CGI-скриптов в каталоге, в котором установлен gitweb. Предположим, что это каталог /var/www/cgi-bin.
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
Options Indexes FollowSymlinks ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory> С этой настройкой полный путь для просмотра репозиториев будет:
http://server/cgi-bin/gitweb.cgi
Apache с mod_perl, через ModPerl::Registry
Вы можете использовать mod_perl с gitweb. Вы должны установить Apache::Registry (для mod_perl 1.x) или ModPerl::Registry (для mod_perl 2.x), чтобы включить эту поддержку.
Предполагая, что gitweb установлен в /var/www/perl, следующая настройка Apache (для mod_perl 2.x) подходит.
Alias /perl "/var/www/perl"
<Directory "/var/www/perl">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options Indexes FollowSymlinks +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory> С этой настройкой полный путь для просмотра репозиториев будет:
http://server/perl/gitweb.cgi
Apache с FastCGI
Gitweb работает с Apache и FastCGI. Сначала вам нужно переименовать, скопировать или создать символическую ссылку gitweb.cgi на gitweb.fcgi. Предположим, что gitweb установлен в /usr/share/gitweb каталоге. Следующая настройка Apache подходит (НЕ ТЕСТИРОВАЛОСЬ!)
FastCgiServer /usr/share/gitweb/gitweb.cgi
ScriptAlias /gitweb /usr/share/gitweb/gitweb.cgi
Alias /gitweb/static /usr/share/gitweb/static
<Directory /usr/share/gitweb/static>
SetHandler default-handler
</Directory> С этой настройкой полный путь для просмотра репозиториев будет:
http://server/gitweb
Расширенная настройка веб-сервера
Все эти примеры используют перенаправление запросов и требуют mod_rewrite (или эквивалента; примеры ниже написаны для Apache).
Один URL для gitweb и для скачивания
Если вы хотите иметь один URL для gitweb и ваших http:// репозиториев, вы можете настроить Apache так:
<VirtualHost *:80>
ServerName git.example.org
DocumentRoot /pub/git
SetEnv GITWEB_CONFIG /etc/gitweb.conf
# turning on mod rewrite
RewriteEngine on
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi
# make access for "dumb clients" work
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ \
/cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
</VirtualHost> Вышеуказанная конфигурация предполагает, что ваши публичные репозитории находятся в /pub/git и будут обслуживаться как http://git.domain.org/dir-under-pub-git, как клонируемый URL Git, так и как браузерный интерфейс gitweb. Если вы затем запустите git-daemon[1] с --base-path=/pub/git --export-all, то вы даже сможете использовать URL git:// с точно таким же путем.
Установка переменной окружения GITWEB_CONFIG сообщит gitweb использовать указанный файл (т.е. в данном примере /etc/gitweb.conf) в качестве конфигурации для gitweb. Вам, по сути, не нужно это в примере выше; это требуется только если ваш конфигурационный файл находится в другом месте, чем встроенный (при компиляции gitweb) gitweb_config.perl или /etc/gitweb.conf. Смотрите gitweb.conf[5] для подробностей, особенно по правилам приоритета.
Если вы используете правила перенаправления из примера, вам, возможно, также потребуется что-то вроде следующего в вашем файле конфигурации gitweb (/etc/gitweb.conf следующий пример):
@stylesheets = ("/some/absolute/path/gitweb.css");
$my_uri = "/";
$home_link = "/";
$per_request_config = 1; Однако в настоящее время gitweb должен создавать тег HTML base при необходимости (для установки базового URI для относительных ссылок), поэтому он должен работать автоматически.
Настройка веб-сервера с несколькими корнями проекта
Если вы хотите использовать gitweb с несколькими корнями проекта, вы можете изменить ваши файлы виртуального хоста Apache и конфигурации gitweb следующим образом.
Конфигурация виртуального хоста (в файле конфигурации Apache) должна выглядеть так:
<VirtualHost *:80>
ServerName git.example.org
DocumentRoot /pub/git
SetEnv GITWEB_CONFIG /etc/gitweb.conf
# turning on mod rewrite
RewriteEngine on
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi [QSA,L,PT]
# look for a public_git directory in unix users' home
# http://git.example.org/~<user>/
RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
# http://git.example.org/+<user>/
#RewriteRule ^/\+([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
# http://git.example.org/user/<user>/
#RewriteRule ^/user/([^\/]+)/(gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
# defined list of project roots
RewriteRule ^/scm(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/pub/scm/,L,PT]
RewriteRule ^/var(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \
[QSA,E=GITWEB_PROJECTROOT:/var/git/,L,PT]
# make access for "dumb clients" work
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ \
/cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
</VirtualHost> Здесь фактический корень проекта передаётся gitweb через GITWEB_PROJECT_ROOT переменную окружения от веб-сервера, поэтому вам нужно добавить следующую строку в файл конфигурации gitweb (/etc/gitweb.conf в примере выше):
$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git"; Примечание, что это должно быть установлено для каждого запроса, поэтому либо $per_request_config должно быть false, либо вышеупомянутое должно быть помещено в код, на который ссылается $per_request_config;
Эти конфигурации позволяют сделать два действия. Во-первых, каждый пользователь unix (<user>) сервера сможет просматривать через gitweb репозитории Git, найденные в ~/public_git/ по следующему URL:
http://git.example.org/~<user>/
Если вы не хотите этой функции на вашем сервере, просто удалите второе правило перенаправления.
Если вы уже используете mod_userdir в вашем виртуальном хосте или не хотите использовать «~» в качестве первого символа, просто прокомментируйте или удалите второе правило перенаправления и раскомментируйте одно из следующих, в зависимости от того, что вы хотите.
Во-вторых, репозитории, найденные в /pub/scm/ и /var/git/, будут доступны через http://git.example.org/scm/ и http://git.example.org/var/. Вы можете добавлять столько корней проекта, сколько вам нужно, добавляя правила перенаправления, как третье и четвёртое.
Использование PATH_INFO
Если вы включите использование PATH_INFO в gitweb, поместив
$feature{'pathinfo'}{'default'} = [1]; в ваш файл конфигурации gitweb, можно настроить сервер, чтобы он потреблял и генерировал URL-адреса в виде
http://git.example.com/project.git/shortlog/sometag
т.е. без части gitweb.cgi, используя конфигурацию, такую как следующая. Эта конфигурация предполагает, что /var/www/gitweb - это DocumentRoot вашего веб-сервера, содержит скрипт gitweb.cgi и вспомогательные статические файлы (стили, favicon, JavaScript):
<VirtualHost *:80>
ServerAlias git.example.com
DocumentRoot /var/www/gitweb
<Directory /var/www/gitweb>
Options ExecCGI
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
</VirtualHost> Правило перенаправления гарантирует, что существующие статические файлы будут правильно обслуживаться, а любой другой URL будет передан gitweb в качестве параметра PATH_INFO.
Обратите внимание, что в этом случае вам не нужны особые настройки для @stylesheets, $my_uri и $home_link, но вы теряете доступ «глупого клиента» к вашим проектам .git (описано в разделе «Один URL для gitweb и для скачивания»). Возможным решением для последнего является следующее: в вашем корневом каталоге проекта (например, /pub/git) имейте проекты, именованные **без** расширения .git (например, /pub/git/project вместо /pub/git/project.git) и настройте Apache следующим образом:
<VirtualHost *:80>
ServerAlias git.example.com
DocumentRoot /var/www/gitweb
AliasMatch ^(/.*?)(\.git)(/.*)?$ /pub/git$1$3
<Directory /var/www/gitweb>
Options ExecCGI
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
</VirtualHost> Дополнительное AliasMatch делает так, что
http://git.example.com/project.git
обеспечит прямой доступ к каталогу Git проекта (чтобы проект можно было клонировать), а
http://git.example.com/project
предоставит доступ через удобный для человека интерфейс gitweb.
Это решение не на 100% защищено от ошибок, в том смысле, что если у проекта есть именованная ссылка (ветвь, тег), начинающаяся с git/, то пути, такие как
http://git.example.com/project/command/abranch..git/abranch
будут возвращать ошибку 404.
Ошибки
Пожалуйста, сообщайте о любых ошибках или предложениях по улучшениям на git@vger.kernel.org, поместив «gitweb» в тему письма.
См. также
gitweb.conf[5], git-instaweb[1]
gitweb/README, gitweb/INSTALL
gitweb
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/gitweb