This tutorial will covering common feature in git repository
- commiting via ssh
- Enable gitweb for web access
- cloning anonymously using the Git protocol
Install git, git-daemon
# yum -y install git git-daemon gitweb
Create a git user/group
# useradd -U -d /var/cache/git -s /usr/libexec/git-core/git-shell git
Make sure the permissions of the directory are correct
# cd /var/cache # chown -R git:git git # chmod 755 git
We’ll be using SSH keys for authenication, so collect the public keys of all the users who need commit access. Then, put the public keys into the right place
# cd /var/cache/git # mkdir .ssh # chmod 700 .ssh # touch .ssh/authorized_keys # chmod 600 .ssh/authorized_keys (Put the public keys into authorized_keys, one per line) # chown -R git:git .ssh/
create init script for git
# vi /etc/init.d/git
#!/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
save it, change permission, add it to runlevel system services then start it
# chmod 755 /etc/init.d/git # chkconfig git on # service git start
now, Let’s create a repo for testing
# cd /var/cache/git/ # mkdir test.git # cd test.git # git init --bare # chown -R git:git ../test.git/
Add short description about test.git
# cd /var/cache/git/test.git/ # echo "test test repo" > description # vi config
[core] repositoryformatversion = 0 filemode = true bare = true [gitweb] owner = Your Name
Create a local repo and commit
$ mkdir ~/test $ cd ~/test && git init $ echo 'test' > README $ git add README $ git commit -m "initial README file"
Before push it into the remote repo, we should create ssh rsa public key(we’ll add it to authorized_keys on the repository server)
$ ssh-keygen -t rsa -C "yourmail@domain.tld"
Now push it into the remote repo
$ git remote add origin git@git.domain.tld:test.git $ git push origin master
now, setting up web interface for viewing/accessing via web browser. In fedora 12 there’s already git.conf template for apache, we need to change a bit
# vi /etc/httpd/conf.d/git.conf
Alias /git /var/www/git/ RewriteEngine On RewriteRule ^git$ git/ [R] <Directory /var/www/git> AllowOverride None Options +ExecCGI +Indexes +FollowSymLinks Order allow,deny Allow from all DirectoryIndex gitweb.cgi SetEnv GITWEB_CONFIG "/etc/gitweb.conf" AddHandler cgi-script .cgi RewriteEngine On RewriteBase /git/ RewriteRule ^$ gitweb.cgi [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) gitweb.cgi/$1 [QSA,L] </Directory>
Adjust gitweb.conf in /etc directory
# vi /etc/gitweb.conf
$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 = "git.domain.tld - 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://git.domain.tld / git "; $stylesheet = "/git/gitweb.css"; $logo = "/git/git-logo.png"; $favicon = "/git/git-favicon.png"; $feature{'pathinfo'}{'default'} = [1]; $my_uri = "http://git.domain.tld/git/"; $home_link = "http://git.domain.tld/git/";
restart Apache/httpd
# service httpd restart
That’s it, we have our own shiny git repository 😀
Very nice …
I discoverd 1 error:
cd /var/cache
mkdir .ssh
-> should be: cd /var/cache/git
mkdir .ssh
…etc…etc
N.B. the user is created under /var/cache/git :))
whoopss, you’re right. thanks for noticing 🙂
Hi, I’m very interested in Linux but Im a Super Newbie and I’m having trouble deciding on the right distribution for me (Havent you heard this a million times?) anyway here is my problem, I need a distribution that can switch between reading and writing in English and Japanese (Japanese Language Support) with out restarting the operating system.
well, i’m not so often dealing with locale, but you can change it in /etc/sysconfig/i18n. (depend on system you are using)
but as far as i know, user must log out then log in again in order to take the change effective.
When i want to push with ssh protocol how can i proceed?
when i execute:
git remote add origin git@git.domain.tld:test.git
a message is appeared :
fatal: Not a git repository (or any of the parent directories): .git
What’s my problem?
Thanks 🙂