Difference between revisions of "Git and Gitweb"

From Amahi Wiki
Jump to: navigation, search
Line 64: Line 64:
 
chmod 600 .ssh/authorized_keys
 
chmod 600 .ssh/authorized_keys
 
chown -R git:git .ssh/}}</li>
 
chown -R git:git .ssh/}}</li>
<li>Create /etc/init.d/git and add the following
+
<li>Create '''/etc/init.d/git''' file and add the following
 
{{Text|Text=#!/bin/sh
 
{{Text|Text=#!/bin/sh
 
<nowiki>#</nowiki>
 
<nowiki>#</nowiki>
Line 140: Line 140:
 
{{Code|cd /var/cache/git/test.git/
 
{{Code|cd /var/cache/git/test.git/
 
echo "test test repo" > description}}</li>
 
echo "test test repo" > description}}</li>
<li>Update config as follows
+
<li>Update '''config''' file as follows
 
{{Text|Text=[core]
 
{{Text|Text=[core]
 
       repositoryformatversion = 0
 
       repositoryformatversion = 0
Line 159: Line 159:
 
{{Code|git remote add origin git@git.yourisp.com:test.git
 
{{Code|git remote add origin git@git.yourisp.com:test.git
 
git push origin master}}</li>
 
git push origin master}}</li>
<li>Add to bottom of /etc/gitweb.conf
+
<li>Add to bottom of '''/etc/gitweb.conf''' file
 
{{Text|Text=$feature{'blame'}{'default'} = [undef];
 
{{Text|Text=$feature{'blame'}{'default'} = [undef];
 
$feature{'pickaxe'}{'default'} = [undef];
 
$feature{'pickaxe'}{'default'} = [undef];

Revision as of 12:11, 13 March 2012

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

  • Create web app (Advanced Settings must be enabled on HDA)
    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:
      bash code
      ​cd /etc/httpd/conf.d​
    7. Look for the ####-gitweb.conf (#### is some number, i.e. 1000) file and open it in your favorite editor. Remove the text between ServerAlias and the last two lines, then add the following
      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 /etc/httpd/conf.d/git.conf <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>​
    8. Restart web server to enable the changes
      bash code
      ​/etc/init.d/httpd restart;
    9. Create web page to browse repository
    10. bash code
      ​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://git/git/"></HEAD> <BODY> Optional page text here. </BODY> </HTML>' > html/index.html chown apache.users html/index.html​
  • Install dependencies
    bash code
    ​yum -y install git git-daemon gitweb​
  • Add user
    bash code
    ​useradd -U -d /var/cache/git -s /usr/libexec/git-core/git-shell git​
  • Set directory permissions
    bash code
    ​cd /var/cache chown -R git:git git chmod 755 git​
  • Create public SSH key storage
    bash code
    ​cd /var/cache/git; mkdir .ssh chmod 700 .ssh touch .ssh/authorized_keys chmod 600 .ssh/authorized_keys chown -R git:git .ssh/​
  • Create /etc/init.d/git file and add the following
    Text
    ​#!/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​
  • Set init script to run
    bash code
    ​chmod 755 /etc/init.d/git; chkconfig git on service git start​
  • Create repository
    bash code
    ​cd /var/cache/git/ mkdir test.git cd test.git git init --bare chown -R git:git ../test.git/​
  • Add a short description
    bash code
    ​cd /var/cache/git/test.git/ echo "test test repo" > description​
  • Update config file as follows
    Text
    ​[core] repositoryformatversion = 0 filemode = true bare = true [gitweb] owner = Your Name​
  • Create local repository and commit
    bash code
    ​mkdir ~/test cd ~/test && git init echo 'test' > README git add README git commit -m "initial README file"
  • Create SSH rsa public key
    bash code
    ​ssh-keygen -t rsa -C "admin@yourisp.com" -N amahi -f /var/cache/git/.ssh/authorized_keys​
  • Push to the repository
    bash code
    ​git remote add origin git@git.yourisp.com:test.git git push origin master​
  • Add to bottom of /etc/gitweb.conf file
    Text
    ​$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
    bash code
    ​cp -r /var/www/git/* html chown -R apache:users html​

Complete

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

References

Hosting your own Git Repository on Fedora 12