Git-scm.com is the new home for git. Download the source code and install in /usr/local
Gitosis is a tool to manage Git repositories. Obtain the latest copy from the repository:
git clone git://eagain.net/gitosis |
Install the following RPMs:
The README.rst included with gitosis and Chapter 11 of Pragmatic Version Control Using Git explain how to install it. On RHEL/CentOS, the gitosis user is created using
useradd --shell /bin/sh --create-home --comment 'git version control' \ --home /usr/local/lib/gitosis gitosis |
Note: after running
python setup.py install |
Make sure to run
chmod +x /usr/local/lib/gitosis/gitosis/repositories/gitosis-admin.git/hooks/post-update |
Otherwise, gitosis will not correctly add each user's public key to ~git/.ssh/authorized_keys
git-daemon can be run by xinetd, by creating the file /etc/xinetd.d/git
# default: off
# description: The git dæmon allows git repositories to be exported using
# the git:// protocol.
service git
{
disable = no
socket_type = stream
wait = no
user = gitosis
server = /usr/bin/git-daemon
server_args = --base-path=/usr/local/lib/gitosis/repositories --export-all --syslog --inetd --verbose
log_on_failure += USERID
# xinetd doesn't do this by default. bug #195265
flags = IPv6
}
|
create a DNS cname (alias) for a hostname that will be used for GitWeb. Using a Virtual Host seems to be the preferred method of configuring Apache to work with gitweb.cgi
/etc/httpd/conf.d/git.conf
Options +FollowSymLinks
<VirtualHost *:80>
ServerName eol-git.guest.ucar.edu
SetEnv GITWEB_CONFIG /etc/gitweb.conf
ServerAlias eol-git.guest.ucar.edu
DocumentRoot /var/www/git
<Directory /var/www/git>
Options +ExecCGI
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
RewriteEngine On
RewriteBase /git
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
</VirtualHost>
|
eol-git.guest.ucar.edu:/etc/gitweb.conf contains:
# Include the global configuration, if found.
# do "/etc/gitweb.conf" if \-e "/etc/gitweb.conf";
# Point to projects.list file generated by gitosis.
# Here gitosis manages the user "git", who has a
# home directory of /srv/example.com/git
$projects_list = "/usr/local/lib/gitosis/repositories";
# Where the actual repositories are located.
$projectroot = "/usr/local/lib/gitosis/repositories";
# By default, gitweb will happily let people browse any repository
# they guess the name of. This may or may not be what you wanted. I
# choose to allow gitweb to show only repositories that git-daemon
# is already sharing anonymously.
$export_ok = "git-daemon-export-ok";
# Alternatively, you could set these, to allow exactly the things in
# projects.list, which in this case is the repos with gitweb=yes
# in gitosis.conf. This means you don't need daemon=yes, but you
# can't have repositories hidden but browsable if you know the name.
# And note gitweb already allows downloading the full repository,
# so you might as well serve git-daemon too.
# $export_ok = "";
# $strict_export = "true";
# A list of base urls where all the repositories can be cloned from.
# Easier than having per-repository cloneurl files.
@git_base_url_list = ('git://eol-git.guest.ucar.edu');
# allow snapshots
$feature{'snapshot'}{'default'} = \[1\];
$feature{'blame'}{'default'} = \[1\];
$feature{'pathinfo'}{'default'} = \[1\];
|
gitosis.conf needs to enable daemon access for each repository:
[gitosis] gitweb.snapshot = tbz2,tgz [group gitosis-admin] writable = gitosis-admin owner = vanandel members = vanandel dennisf [group chill_par_rec] writable = chill_par_rec members = vanandel dennisf description = CSU CHILL radar data aquisition owner = vanandel gitweb = yes daemon = yes [repo chill_par_rec] daemon = yes gitweb = yes |
gitweb.cgi is installed in /var/www/_git_cgi-bin/
The remaining gitweb support files are installed in /var/www/_gitweb
/etc/httpd/conf.d/git.conf
# map /git/* to call the CGI ScriptAlias /git "/var/www/_git_cgi-bin/gitweb.cgi" <Directory "/var/www/_git_cgi-bin"> Options ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> SetEnv GITWEB_CONFIG /etc/gitweb.conf # map references to _gitweb to /var/www/_gitweb - this is where our icons and stylesheets live Alias /_gitweb/ "/var/www/_gitweb/" <Directory "/var/www/_gitweb"> Options None AllowOverride None Order allow,deny Allow from all </Directory> |
/etc/gitweb.conf
$projectroot = '/usr/local/git/repositories/'; $GIT = '/opt/local/bin/git'; $logo_url = "http://git-scm.com"; $my_uri = "/git"; $favicon = "_gitweb/git-favicon.png"; $logo = "_gitweb/git-logo.png"; $stylesheet = "_gitweb/gitweb.css"; $projects_list = "/usr/local/git/repositories"; |
The GITWEB_CONFIG environment variable does not seem to be set by Apache, so we must modify the getweb.cgi script
our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "/etc/gitweb.conf";
|
Pragmatic Version Control Using Git