f19f How to setup a Git repository - The FreeBSD Forums
The FreeBSD Forums  

Go Back   The FreeBSD Forums > Miscellaneous > Howtos & FAQs (Moderated)

Howtos & FAQs (Moderated) Would you like to share some of your solutions for certain problems? Tips or tricks? Post here. All new topics are automatically moderated.

Reply
 
Thread Tools Display Modes
  #1  
Old January 30th, 2010, 08:52
dennylin93 dennylin93 is offline
Member
 
Join Date: Dec 2008
Posts: 784
Thanks: 34
Thanked 103 Times in 71 Posts
Default How to setup a Git repository

This howto will describe how to setup a Git repository:
  • Dedicated user for Git repos
  • SSH will be used for commits
  • Enable gitweb for web access (Apache will be used)
  • Anonymous cloning using the Git protocol

For those who don't know what Git is:
You should know how to use Git before reading on.

Install devel/git. Select GITWEB. SVN, P4, and CVS are optional. Deselect them if you don't plan to use them.

Create a git user with uid and gid as 9418:
Code:
# pw groupadd -n git -g 9418
# pw useradd -n git -u 9418 -g git -c git -d /git \
	-s /usr/local/libexec/git-core/git-shell -h -
The git-shell is used for this user, and home is set as /git/. The repos will be under /git/base/.

Make sure the permissions of the directory are correct and create /git/base/:
Code:
# chown git:git /git/
# chmod 755 /git
# mkdir /git/base/
# chown git:git /git/base/
# chmod 775 /git/base/
Next, add users to the git group to be able to create repositories under /git/base/. This isn't necessary for users who only need commit access.
Code:
# vi /etc/group
...
git:*:9418:user1,user2
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:
Code:
# mkdir /git/.ssh/
# chmod 700 /git/.ssh/
# touch /git/.ssh/authorized_keys
# chmod 600 /git/.ssh/authorized_keys
(Put the public keys into authorized_keys, one per line)
# chown -R git:git /git/.ssh/
Everything should be set now. Let's create a repo for testing (change to a user that has been added to the git group and has commit access).
Code:
$ mkdir /git/base/test.git
$ cd /git/base/test.git && git init --bare --shared
Create a local repo and commit:
Code:
$ mkdir ~/test
$ cd ~/test && git init
$ echo '123456' > foo
$ git add .
$ git commit
Now push it into the remote repo (remember to replace git.example.com with your own hostname):
Code:
$ git remote add origin git@git.example.com:base/test.git
$ git push origin master
Don't delete the test repo yet.

Since the git repo should be up and working by now, let's enable gitweb for web access. Apache's VirtualHost will be used for this.

Copy gitweb files to /home/www/git/:
Code:
$ cp /usr/local/share/examples/git/gitweb/git* /home/www/git/
Modify Apache settings (change the ServerName and the access and error log paths as necessary):
Code:
<VirtualHost *:80>
  ServerAdmin webmaster@yourhostname
  DocumentRoot "/home/www/git"
  ServerName git.example.com
  ErrorLog "/path/to/errolog"
  CustomLog "/path/to/accesslog" combined

  <Directory "/home/www/git">
    Options ExecCGI
    Order allow,deny
    Allow from all

    DirectoryIndex gitweb.cgi
    AddHandler cgi-script .cgi
  </Directory>
</VirtualHost>
Now edit gitweb.cgi:
Code:
-our $projectroot = "/pub/scm";
+our $projectroot = "/git/base";
...
-our $home_link_str = "projects";
+our $home_link_str = "base";
...
-our $site_name = ""
+our $site_name = "git.example.com"
...
-our $home_text = "indextext.html";
+our $home_text = "content.html"; (Leave empty if unnecessary)
...
-our $projects_list_description_width = 25;
+our $projects_list_description_width = 40; (Give the description a bit more space)
Change the $site_header, $home_text, and $site_footer as needed.

Open up your browser and check if it's working.

You might notice that the description of the test repo hasn't been modified yet. You might also want to change the owner.

For the description, edit /git/base/test.git/description. Put this into /git/base/test.git/config to change the owner:
Code:
[gitweb]
        owner = Your Name
Only the Git protocol isn't working now.

Add this to /etc/rc.conf:
Code:
git_daemon_enable="YES"
git_daemon_directory="/git"
git_daemon_flags="--syslog --base-path=/git --export-all"
Start the daemon:
Code:
# /usr/local/etc/rc.d/git_daemon start
You should now be able to clone using the Git protocol. Try it out:
Code:
$ cd /tmp/
$ git clone git://git.example.com/base/test.git
One last thing. You might want to list URLs for cloning repos on the summary page of test.git in gitweb. Just add this line (the url line) to the [gitweb] section of /git/base/test.git/config:
Code:
[gitweb]
        owner = Your Name
        url = git://git.example.com/base/test.git
This line can appear more than once if there are multiple URLs:
Code:
[gitweb]
        owner = Your Name
        url = git://git.example.com/base/test.git
        url = git@git.example.com:base/test.git

Last edited by dennylin93; February 4th, 2010 at 02:30.
Reply With Quote
The Following 15 Users Say Thank You to dennylin93 For This Useful Post:
beginner (January 30th, 2010), blaize (May 2nd, 2013), blodan (July 8th, 2012), draco003 (September 26th, 2011), fefo (January 31st, 2010), graudeejs (January 30th, 2010), jkusniar (February 2nd, 2010), jnbek (May 4th, 2013), lme@ (November 11th, 2012), marino (August 15th, 2010), Symbiosis (June 8th, 2010), unconnected (September 23rd, 2010), UNIXgod (October 21st, 2010), vertexSymphony (October 25th, 2010), VictorGT (October 21st, 2010)
  #2  
Old October 21st, 2010, 15:53
VictorGT VictorGT is offline
Junior Member
 
Join Date: Oct 2010
Posts: 1
Thanks: 1
Thanked 1 Time in 1 Post
Default

Thanks a lot for this useful article!

I've noticed one problem on my FreeBSD 7.2 - looks like it is better to add one more flag (--detach) to the rc.conf:
Code:
git_daemon_flags="--syslog --base-path=/git --export-all --detach"

Last edited by DutchDaemon; October 21st, 2010 at 18:32.
Reply With Quote
The Following User Says Thank You to VictorGT For This Useful Post:
blodan (July 8th, 2012)
  #3  
Old October 21st, 2010, 16:35
graudeejs's Avatar
graudeejs graudeejs is offline
Style(9) Addict
 
Join Date: Nov 2008
Location: Riga, Latvia
Posts: 4,525
Thanks: 422
Thanked 607 Times in 475 Posts
Default

You can use devel/py-gitosis to manage git users.
This way system only needs 1 git user. Other users will be virtual users (authorization with ssh public/private keys)

It is very nice peace of software...
I use gitosis & cgit at git.bsdroot.lv
Reply With Quote
The Following User Says Thank You to graudeejs For This Useful Post:
draco003 (September 26th, 2011)
  #4  
Old May 25th, 2012, 20:05
blaize blaize is offline
Junior Member
 
Join Date: May 2012
Posts: 21
Thanks: 2
Thanked 3 Times in 3 Posts
Default

Quote:
Originally Posted by VictorGT View Post
Thanks a lot for this useful article!

I've noticed one problem on my FreeBSD 7.2 - looks like it is better to add one more flag (--detach) to the rc.conf:
Code:
git_daemon_flags="--syslog --base-path=/git --export-all --detach"
I have the same problem on FreeBSD 9, if you don't add --detach in rc.conf, the daemon is started in the foreground and the boot process is stuck at launching the daemon (before SSH :/)

Except that, everything works very well ! Thank you.

Last edited by DutchDaemon; May 25th, 2012 at 20:43. Reason: Proper formatting / spelling
Reply With Quote
The Following User Says Thank You to blaize For This Useful Post:
blodan (July 8th, 2012)
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Packages repository Twister Installation and Maintenance of FreeBSD Ports or Packages 4 December 29th, 2009 08:45
[Solved] Where to put SVN repository? rhimbo General 4 October 16th, 2009 10:30
Changing package repository rahulsinner Installation and Maintenance of FreeBSD Ports or Packages 3 April 21st, 2009 04:35
CVS change repository osa Web & Network Services 3 December 2nd, 2008 09:36
Using X.Org from git SaveTheRbtz X.Org 2 November 26th, 2008 23:51


All times are GMT +1. The time now is 07:25.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2013, vBulletin Solutions, Inc.
The mark FreeBSD is a registered trademark of The FreeBSD Foundation and is used by The FreeBSD Project with the permission of The FreeBSD Foundation.
Web protection and acceleration provided by CloudFlare
0