Git and Gitweb

From Amahi Wiki
Jump to: navigation, search
Msgbox.update.png Update Needed
The contents of this page have become outdated or irrelevant. Please consider updating it.


NOTE: There is a one-click app currently in ALPHA being tested.

Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do. Coupled with Gitweb, provides a web interface for browsing your project.

This tutorial will show you how to install, create a repo, and browse that repo on your HDA.


NOTE: Tested on Fedora 14.

Setup

  1. From the Dashboard main page, select Apps at the top.
  2. Choose Webapps
  3. Select New Web App button at the bottom
  4. Enter gitweb for the Name (ensure the path reflects the name correctly)
  5. Choose Create
  6. Open a terminal as root user and do the following:
  7. Install dependencies
    yum -y install git git-daemon gitweb
  8. Look for the ####-gitweb.conf in /etc/httpd/conf.d (#### is some number, i.e. 1000) file and open it in your favorite editor. Add text after ServerAlias line
    Text=Alias /git /var/hda/web-apps/gitweb/html
    RewriteEngine On
    RewriteRule ^git$ git/ [R]
    DirectoryIndex gitweb.cgi
    SetEnv GITWEB_CONFIG "/etc/gitweb.conf"
    AddHandler cgi-script .cgi
  9. Create web page to browse repository
  10. cd /var/hda/web-apps/gitweb
    echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Your Page Title</title>
    <meta http-equiv="REFRESH" content="0;url=http://gitweb/git/"></HEAD>
    <BODY>
    Optional page text here.
    </BODY>
    </HTML>' > html/index.html
    chown apache.users html/index.html
  • Add user
    useradd -U -d /var/cache/git -s /usr/libexec/git-core/git-shell git
  • Set directory permissions
    cd /var/cache
    chown -R git:git git
    chmod 755 git/
  • Create /etc/init.d/git file and add the following
    #!/bin/sh
    #
    #   Startup/shutdown script for Git Daemon
    #
    #   Linux chkconfig stuff:
    #
    #   chkconfig: 345 56 10
    #   description: Startup/shutdown script for Git Daemon
    #
    . /etc/init.d/functions
     
    DAEMON=/usr/libexec/git-core/git-daemon
    ARGS='--base-path=/var/cache/git --detach --syslog --export-all --user=git --group=git'
     
    prog=git-daemon
     
    start () {
     echo -n $"Starting $prog: "
     
     # start daemon
     daemon $DAEMON $ARGS
     RETVAL=$?
     echo
     [ $RETVAL = 0 ] && touch /var/lock/git-daemon
     return $RETVAL
    }
     
    stop () {
     # stop daemon
     echo -n $"Stopping $prog: "
     killproc $DAEMON
     RETVAL=$?
     echo
     [ $RETVAL = 0 ] && rm -f /var/lock/git-daemon
    }
     
    restart() {
     stop
     start
    }
     
    case $1 in
     start)
     start
     ;;
     stop)
     stop
     ;;
     restart)
     restart
     ;;
     status)
     status $DAEMON
     RETVAL=$?
     ;;
     *)
     
     echo $"Usage: $prog {start|stop|restart|status}"
     exit 3
    esac
     
    exit $RETVAL
  • Set init script to run
    chmod 755 /etc/init.d/git;
    /etc/init.d/git start
    /sbin/chkconfig git on
  • Set User information (change user.name and user.email accordingly)
    git config --global user.name "MyHDA"
    git config --global user.email myhda@localhost
  • Create temporary repository
    cd /var/cache/git/
    git init test
    cd test
  • Add test file and a short description
    echo 'test' > README
    git add README
    git commit -a -m "initial README file"
  • Create local repository
    cd /var/cache/git/
    git clone test test.git
    cd test.git
    git push origin master
  • Edit /var/cache/git/test/.git/config and add the following at the bottom (change MyHDA as desired)
    [gitweb]
           owner = MyHDA
  • Add to bottom of /etc/gitweb.conf file
    $feature{'blame'}{'default'} = [undef];
    $feature{'pickaxe'}{'default'} = [undef];
    $feature{'search'}{'default'} = [undef];
    $feature{'grep'}{'default'} = 1;
    $feature{'snapshot'}{'default'} = ['tgz', 'gzip', 'zip'];
    $feature{'snapshot'}{'override'} = 1;
    $site_name = "HDA Git";
    $projectroot = '/var/cache/git/';
    $projects_list_description_width = 50;
    $git_temp = "/tmp";
    $home_text = "indextext.html";
    $site_footer = "indexfooter.html";
    $projects_list = $projectroot;
    $home_link_str = "http://gitweb / git ";
    $stylesheet = "/git/static/gitweb.css";
    $logo = "/git/static/git-logo.png";
    $favicon = "/git/static/git-favicon.png";
    $feature{'pathinfo'}{'default'} = [1];
    $my_uri = "http://gitweb/git/";
    $home_link = "http://gitweb/git/;"
  • Copy web files and set permissions
    d /var/hda/web-apps/gitweb
    cp -r /var/www/git/* html
    chown -R apache:users html/
  • Update local repository description
    cd /var/cache/git
    sed -i '1d' test.git​/.git/description
    echo 'Test Repo' >> test.git​/.git/description
  • Edit /etc/httpd/conf.d/git.conf and replace with this text
    <Directory /var/hda/web-apps/gitweb/html>     
           RewriteEngine On
           RewriteBase /git/
           RewriteRule ^$ gitweb.cgi  [L]
           RewriteCond %{REQUEST_FILENAME} !-f
           RewriteCond %{REQUEST_FILENAME} !-d
           RewriteRule (.*) gitweb.cgi/$1  [QSA,L]
    </Directory>
  • Update permissions, remove temporary repository, and restart web server
    chown -R git.git /var/cache/git
    rm -rf /var/cache/git/test
    /etc/init.d/httpd restart
  • Complete

    That is it. Navigate to http://gitweb/git to browse the newly created repository.

    Optional

    You can add the Amahi repo by doing the following:

    cd /var/cache/git
    git clone git://git.amahi.org/amahi.git

    References