本文转自: http://forums.freebsd.org/showthread.php?t=10810
How to setup a Git repository
This howto will describe how to setup a Git repository:
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:
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/:
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.
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:
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).
Create a local repo and commit:
Now push it into the remote repo (remember to replace git.example.com with your own hostname):
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/:
Modify Apache settings (change the ServerName and the access and error log paths as necessary):
Now edit
gitweb.cgi:
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:
Only the Git protocol isn't working now.
Add this to /etc/rc.conf:
Start the daemon:
You should now be able to clone using the Git protocol. Try it out:
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:
This line can appear more than once if there are multiple URLs:
- 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:
- Git
- Git (Wikipedia)
- Revision control
- Distributed revision control
- Comparison of revision control software
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 -
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/
Code:
# vi /etc/group ... git:*:9418:user1,user2
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/
Code:
$ mkdir /git/base/test.git $ cd /git/base/test.git && git init --bare --shared
Code:
$ mkdir ~/test $ cd ~/test && git init $ echo '123456' > foo $ git add . $ git commit
Code:
$ git remote add origin [email protected]:base/test.git $ git push origin master
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/
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>
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)
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
Add this to /etc/rc.conf:
Code:
git_daemon_enable="YES" git_daemon_directory="/git" git_daemon_flags="--syslog --base-path=/git --export-all"
Code:
# /usr/local/etc/rc.d/git_daemon start
Code:
$ cd /tmp/ $ git clone git://git.example.com/base/test.git
Code:
[gitweb] owner = Your Name url = git://git.example.com/base/test.git
Code:
[gitweb] owner = Your Name url = git://git.example.com/base/test.git url = [email protected]:base/test.git
Last edited by dennylin93; February 4th, 2010 at 02:30.
The Following 13 Users Say Thank You to dennylin93 For This Useful Post: |
beginner (January 30th, 2010),
blodan (July 8th, 2012),
draco003 (September 26th, 2011),
fefo (January 31st, 2010),
graudeejs (January 30th, 2010),
jkusniar (February 2nd, 2010),
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
|
|||
|
|||
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. |
The Following User Says Thank You to VictorGT For This Useful Post: |
blodan (July 8th, 2012)
|
#
3
|
||||
|
||||
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 |
The Following User Says Thank You to graudeejs For This Useful Post: |
draco003 (September 26th, 2011)
|
#
4
|
|||
|
|||
Quote:
Except that, everything works very well ! Thank you. Last edited by DutchDaemon; May 25th, 2012 at 20:43. Reason: Proper formatting / spelling |
The Following User Says Thank You to blaize For This Useful Post: |
blodan (July 8th, 2012)
|
«
Previous Thread |
Next Thread
»