Difference between revisions of "Gitweb"

From ArchWiki
Jump to: navigation, search
(simplification of wikilinks, fixing whitespace and capitalization, removing underscores (https://github.com/lahwaacz/wiki-scripts/blob/master/link-checker.py (interactive)))
 
(21 intermediate revisions by 15 users not shown)
Line 1: Line 1:
 
[[Category:Version Control System]]
 
[[Category:Version Control System]]
 +
[[ja:Gitweb]]
 
Gitweb is the default web interface provided with [[git]] itself and is the basis for other git scripts like [[cgit]], [[gitosis]] and others.
 
Gitweb is the default web interface provided with [[git]] itself and is the basis for other git scripts like [[cgit]], [[gitosis]] and others.
  
gitweb actually supports fcgi natively, so you don't need to wrap it as a cgi script http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/INSTALL https://sixohthree.com/1402/running-gitweb-in-fastcgi-mode
+
Gitweb actually supports fcgi natively, so you do not need to wrap it as a cgi script. [http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/INSTALL][https://sixohthree.com/1402/running-gitweb-in-fastcgi-mode]
  
==Installation==
+
== Installation ==
To install gitweb you first have to install git and a webserver. For this example we use apache but you can also use others:
+
pacman -S git apache
+
  
Next you need to link the current gitweb default to your webserver location. In this example I use the default folder locations:
+
To install gitweb you first have to install {{Pkg|git}} and a webserver. Now, if you want to quickly test it, see the help of {{ic|git instaweb}}. Otherwise, if you want a comprehensive setup, keep reading.
  ln -s /usr/share/gitweb /srv/http/gitweb
+
 
 +
For this example we use {{Pkg|apache}} but you can also use {{Pkg|nginx}}, {{Pkg|lighttpd}} or others.
 +
 
 +
Next you need to link the current gitweb default to your webserver location. In this example the default folder locations are used:
 +
  # ln -s /usr/share/gitweb /srv/http/gitweb
  
 
{{Note|1=You may want to double check the server directory to make sure the symbolic links were made.}}
 
{{Note|1=You may want to double check the server directory to make sure the symbolic links were made.}}
  
That's it for the "installation". Next is the configuration.
+
== Configuration ==
 +
 
 +
=== Apache 2.2 ===
  
==Configuration==
+
Add the following to the end of your {{ic|/etc/httpd/conf/httpd.conf}}
===Apache===
+
Add the following to the end of your /etc/httpd/conf/httpd.conf
+
 
  <Directory "/srv/http/gitweb">
 
  <Directory "/srv/http/gitweb">
 
     DirectoryIndex gitweb.cgi
 
     DirectoryIndex gitweb.cgi
Line 30: Line 33:
 
  </Directory>
 
  </Directory>
  
If using a virtualhosts configuration, add this to /etc/httpd/conf/extra/httpd-vhosts.conf
+
If using a virtualhosts configuration, add this to {{ic|/etc/httpd/conf/extra/httpd-vhosts.conf}}
 
  <VirtualHost *:80>
 
  <VirtualHost *:80>
 
     ServerName gitserver
 
     ServerName gitserver
Line 44: Line 47:
 
  </VirtualHost>
 
  </VirtualHost>
  
You could also put the configuration in it's own config file in /etc/httpd/conf/extra/ but that's up to you to decide.
+
You could also put the configuration in its own config file in {{ic|/etc/httpd/conf/extra/}} but that is up to you to decide.
  
===Lighttpd===
+
==== Apache 2.4 ====
Add the following to /etc/lighttpd/lighttpd.conf:
+
 
 +
For Apache 2.4 you need to install {{AUR|mod_perl}} along with {{Pkg|git}} and {{Pkg|apache}}.
 +
 
 +
Create {{ic|/etc/httpd/conf/extra/httpd-gitweb.conf}}
 +
<IfModule mod_perl.c>
 +
    Alias /gitweb "/usr/share/gitweb"
 +
    <Directory "/usr/share/gitweb">
 +
        DirectoryIndex gitweb.cgi
 +
        Require all granted
 +
        Options ExecCGI
 +
        AddHandler perl-script .cgi
 +
        PerlResponseHandler ModPerl::Registry
 +
        PerlOptions +ParseHeaders
 +
        SetEnv  GITWEB_CONFIG  /etc/conf.d/gitweb.conf
 +
    </Directory>
 +
</IfModule>
 +
 
 +
Add the following line to the modules section of {{ic|/etc/httpd/conf/httpd.conf}}
 +
LoadModule perl_module modules/mod_perl.so
 +
 
 +
Add the following line to the end of {{ic|/etc/httpd/conf/httpd.conf}}
 +
# gitweb configuration
 +
Include conf/extra/httpd-gitweb.conf
 +
 
 +
=== Lighttpd ===
 +
 
 +
Add the following to {{ic|/etc/lighttpd/lighttpd.conf}}:
 
  server.modules += ( "mod_alias", "mod_cgi", "mod_redirect", "mod_setenv" )
 
  server.modules += ( "mod_alias", "mod_cgi", "mod_redirect", "mod_setenv" )
 
  setenv.add-environment = ( "GITWEB_CONFIG" => "/etc/conf.d/gitweb.conf" )
 
  setenv.add-environment = ( "GITWEB_CONFIG" => "/etc/conf.d/gitweb.conf" )
Line 59: Line 88:
 
You may also need to add {{ic|".css" &#61;> "text/css"}} to the {{ic|mimetype.assign}} line for GitWeb to display properly.
 
You may also need to add {{ic|".css" &#61;> "text/css"}} to the {{ic|mimetype.assign}} line for GitWeb to display properly.
  
===Nginx===
+
=== Nginx ===
Consider you've symlinked {{ic|ln -s /usr/share/gitweb /var/www}}, append this location to your nginx configuration:
+
 
 +
Consider you have symlinked {{ic|ln -s /usr/share/gitweb /srv/http}}, append this location to your nginx configuration:
 
{{hc|/etc/nginx/nginx.conf|
 
{{hc|/etc/nginx/nginx.conf|
 
<nowiki>location /gitweb/ {
 
<nowiki>location /gitweb/ {
Line 72: Line 102:
 
}</nowiki>
 
}</nowiki>
 
}}
 
}}
Additionally, we have to install {{ic|pacman -S fcgiwrap spawn-fcgi}} and modify the fcgiwrap service file:
+
If you follow [[Nginx#CGI implementation]], try replacing {{ic|include fastcgi_params;}} with {{ic|include fastcgi.conf;}}.
 +
 
 +
Additionally, we have to install {{Pkg|fcgiwrap}} and {{Pkg|spawn-fcgi}} and modify the fcgiwrap service file:
 
{{hc|/usr/lib/systemd/system/fcgiwrap.service|
 
{{hc|/usr/lib/systemd/system/fcgiwrap.service|
 
<nowiki>[Unit]
 
<nowiki>[Unit]
Line 92: Line 124:
 
systemctl start nginx fcgiwrap}}
 
systemctl start nginx fcgiwrap}}
  
===Gitweb config===
+
=== Gitweb config ===
Next we need to make a gitweb config file. Open (or create if it does not exist) the file {{ic|/etc/gitweb.conf}} and place this in it:
+
 
{{hc|/etc/gitweb.conf|<nowiki>
+
Next we need to make a gitweb config file. Open (or create if it does not exist) the file {{ic|/etc/conf.d/gitweb.conf}} and place this in it:
$git_temp = "/tmp";
+
{{hc|/etc/conf.d/gitweb.conf|<nowiki>
 +
our $git_temp = "/tmp";
  
 
# The directories where your projects are. Must not end with a slash.
 
# The directories where your projects are. Must not end with a slash.
$projectroot = "/path/to/your/repositories";  
+
our $projectroot = "/path/to/your/repositories";  
  
 
# Base URLs for links displayed in the web interface.
 
# Base URLs for links displayed in the web interface.
Line 110: Line 143:
 
For apache:
 
For apache:
 
  systemctl restart httpd  
 
  systemctl restart httpd  
 
  
 
Or for lighttpd:
 
Or for lighttpd:
 
  systemctl restart lighttpd
 
  systemctl restart lighttpd
  
===Syntax highlighting===
+
=== Syntax highlighting ===
  
To enable syntax highlighting with Gitweb, you have to first install the {{Pkg|highlight}} package from <nowiki>[community]</nowiki>:
+
To enable syntax highlighting with Gitweb, you have to first install the {{Pkg|highlight}} package:
pacman -S highlight
+
  
 
When highlight has been installed, simply add this line to your {{ic|gitweb.conf}}:
 
When highlight has been installed, simply add this line to your {{ic|gitweb.conf}}:
Line 125: Line 156:
 
Save the file and highlighting should now be enabled.
 
Save the file and highlighting should now be enabled.
  
==Adding repositories==
+
== Adding repositories ==
 +
 
 
To add a repository go to your repository folder, make your repository like so:
 
To add a repository go to your repository folder, make your repository like so:
 
  mkdir my_repository.git
 
  mkdir my_repository.git
Line 131: Line 163:
 
  cd my_repository.git/
 
  cd my_repository.git/
 
  touch git-daemon-export-ok
 
  touch git-daemon-export-ok
  echo "Short project's description" > .git/description
+
  echo "Short project's description" > description
  
Next open the {{ic|.git/config}} file and add this:
+
Next open the {{ic|config}} file and add this:
 
  [gitweb]
 
  [gitweb]
 
         owner = Your Name
 
         owner = Your Name
  
This will fill in the "Owner" field in gitweb. It's not required.
+
This will fill in the "Owner" field in gitweb. It is not required.
  
I assumed that you want to have this repository as "central" repository storage where you push your commits to so the git-daemon-export-ok and --bare are here to have minimal overhead and to allow the git daemon to be used on it.
+
This assumes that you want to have this repository as "central" repository storage where you push your commits to so the git-daemon-export-ok and --bare are here to have minimal overhead and to allow the git daemon to be used on it.
  
 
That is all for making a repository. You can now see it on your http://localhost/gitweb (assuming everything went fine). You do not need to restart apache for new repositories since the gitweb cgi script simply reads your repository folder.
 
That is all for making a repository. You can now see it on your http://localhost/gitweb (assuming everything went fine). You do not need to restart apache for new repositories since the gitweb cgi script simply reads your repository folder.
  
==Thanks to...==
+
== Troubleshooting ==
This howto was mainly based on the awesome howto from howtoforge: http://www.howtoforge.com/how-to-install-a-public-git-repository-on-a-debian-server I only picked the parts that are needed to get it working and left the additional things out.
+
 
 +
=== "An error occurred while reading CGI reply (no response received)" in browser ===
 +
 
 +
When browsing http://localhost/gitweb, there is only a one-line message as title.
 +
By running {{ic|gitweb.cgi}} in command line as follows, we can get the complete error message (assuming you have symlinked {{ic|ln -s /usr/share/gitweb /srv/http}}):
 +
 
 +
{{hc|$ perl /srv/http/gitweb/gitweb.cgi|
 +
Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: /usr/lib/perl5/site_perl
 +
/usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl
 +
/usr/share/perl5/core_perl .) at gitweb/gitweb.cgi line 13.
 +
}}
 +
 
 +
To solve this issue, just install {{Pkg|perl-cgi}}. There is also a bug report: {{Bug|45431}}.
 +
 
 +
== See also ==
 +
 
 +
* [http://www.howtoforge.com/how-to-install-a-public-git-repository-on-a-debian-server How To Install A Public Git Repository On A Debian Server] — HowtoForge page used as the main source for this article.

Latest revision as of 07:42, 17 August 2015

Gitweb is the default web interface provided with git itself and is the basis for other git scripts like cgit, gitosis and others.

Gitweb actually supports fcgi natively, so you do not need to wrap it as a cgi script. [1][2]

Installation

To install gitweb you first have to install git and a webserver. Now, if you want to quickly test it, see the help of git instaweb. Otherwise, if you want a comprehensive setup, keep reading.

For this example we use apache but you can also use nginx, lighttpd or others.

Next you need to link the current gitweb default to your webserver location. In this example the default folder locations are used:

# ln -s /usr/share/gitweb /srv/http/gitweb
Note: You may want to double check the server directory to make sure the symbolic links were made.

Configuration

Apache 2.2

Add the following to the end of your /etc/httpd/conf/httpd.conf

<Directory "/srv/http/gitweb">
   DirectoryIndex gitweb.cgi
   Allow from all
   AllowOverride all
   Order allow,deny
   Options ExecCGI
   <Files gitweb.cgi>
   SetHandler cgi-script
   </Files>
   SetEnv  GITWEB_CONFIG  /etc/conf.d/gitweb.conf
</Directory>

If using a virtualhosts configuration, add this to /etc/httpd/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
    ServerName gitserver
    DocumentRoot /var/www/gitweb
    <Directory /var/www/gitweb>
       Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
       AllowOverride All
       order allow,deny
       Allow from all
       AddHandler cgi-script cgi
       DirectoryIndex gitweb.cgi
   </Directory>
</VirtualHost>

You could also put the configuration in its own config file in /etc/httpd/conf/extra/ but that is up to you to decide.

Apache 2.4

For Apache 2.4 you need to install mod_perlAUR along with git and apache.

Create /etc/httpd/conf/extra/httpd-gitweb.conf

<IfModule mod_perl.c>
    Alias /gitweb "/usr/share/gitweb"
    <Directory "/usr/share/gitweb">
        DirectoryIndex gitweb.cgi
        Require all granted
        Options ExecCGI
        AddHandler perl-script .cgi
        PerlResponseHandler ModPerl::Registry
        PerlOptions +ParseHeaders
        SetEnv  GITWEB_CONFIG  /etc/conf.d/gitweb.conf
    </Directory>
</IfModule>

Add the following line to the modules section of /etc/httpd/conf/httpd.conf

LoadModule perl_module modules/mod_perl.so

Add the following line to the end of /etc/httpd/conf/httpd.conf

# gitweb configuration
Include conf/extra/httpd-gitweb.conf

Lighttpd

Add the following to /etc/lighttpd/lighttpd.conf:

server.modules += ( "mod_alias", "mod_cgi", "mod_redirect", "mod_setenv" )
setenv.add-environment = ( "GITWEB_CONFIG" => "/etc/conf.d/gitweb.conf" )
url.redirect += ( "^/gitweb$" => "/gitweb/" )
alias.url += ( "/gitweb/" => "/usr/share/gitweb/" )
$HTTP["url"] =~ "^/gitweb/" {
       cgi.assign = ( ".cgi" => "" )
       server.indexfiles = ( "gitweb.cgi" )
}

You may also need to add ".css" => "text/css" to the mimetype.assign line for GitWeb to display properly.

Nginx

Consider you have symlinked ln -s /usr/share/gitweb /srv/http, append this location to your nginx configuration:

/etc/nginx/nginx.conf
location /gitweb/ {
        index gitweb.cgi;
        include fastcgi_params;
        gzip off;
        fastcgi_param   GITWEB_CONFIG  /etc/conf.d/gitweb.conf;
        if ($uri ~ "/gitweb/gitweb.cgi") {
                fastcgi_pass    unix:/var/run/fcgiwrap.sock;
        }
}

If you follow Nginx#CGI implementation, try replacing include fastcgi_params; with include fastcgi.conf;.

Additionally, we have to install fcgiwrap and spawn-fcgi and modify the fcgiwrap service file:

/usr/lib/systemd/system/fcgiwrap.service
[Unit]
Description=Simple server for running CGI applications over FastCGI
After=syslog.target network.target

[Service]
Type=forking
Restart=on-abort
PIDFile=/var/run/fcgiwrap.pid
ExecStart=/usr/bin/spawn-fcgi -s /var/run/fcgiwrap.sock -P /var/run/fcgiwrap.pid -u http -g http -- /usr/sbin/fcgiwrap
ExecStop=/usr/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target

In the end, enable and restart the services:

systemctl enable nginx fcgiwrap
systemctl start nginx fcgiwrap

Gitweb config

Next we need to make a gitweb config file. Open (or create if it does not exist) the file /etc/conf.d/gitweb.conf and place this in it:

/etc/conf.d/gitweb.conf
our $git_temp = "/tmp";

# The directories where your projects are. Must not end with a slash.
our $projectroot = "/path/to/your/repositories"; 

# Base URLs for links displayed in the web interface.
our @git_base_url_list = qw(git://<your_server> http://git@<your_server>); 

To enable "blame" view (showing the author of each line in a source file), add the following line:

$feature{'blame'}{'default'} = [1];

Now the the configuration is done, please restart your webserver. For apache:

systemctl restart httpd 

Or for lighttpd:

systemctl restart lighttpd

Syntax highlighting

To enable syntax highlighting with Gitweb, you have to first install the highlight package:

When highlight has been installed, simply add this line to your gitweb.conf:

$feature{'highlight'}{'default'} = [1];

Save the file and highlighting should now be enabled.

Adding repositories

To add a repository go to your repository folder, make your repository like so:

mkdir my_repository.git
git init --bare my_repository.git/
cd my_repository.git/
touch git-daemon-export-ok
echo "Short project's description" > description

Next open the config file and add this:

[gitweb]
        owner = Your Name

This will fill in the "Owner" field in gitweb. It is not required.

This assumes that you want to have this repository as "central" repository storage where you push your commits to so the git-daemon-export-ok and --bare are here to have minimal overhead and to allow the git daemon to be used on it.

That is all for making a repository. You can now see it on your http://localhost/gitweb (assuming everything went fine). You do not need to restart apache for new repositories since the gitweb cgi script simply reads your repository folder.

Troubleshooting

"An error occurred while reading CGI reply (no response received)" in browser

When browsing http://localhost/gitweb, there is only a one-line message as title. By running gitweb.cgi in command line as follows, we can get the complete error message (assuming you have symlinked ln -s /usr/share/gitweb /srv/http):

$ perl /srv/http/gitweb/gitweb.cgi
Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: /usr/lib/perl5/site_perl
 /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl 
/usr/share/perl5/core_perl .) at gitweb/gitweb.cgi line 13.

To solve this issue, just install perl-cgi. There is also a bug report: FS#45431.

See also