It's a long time since I've wrote anything useful here.
Today I will uncover how to make public git hosting with www/nginx, devel/cgit, devel/py-gitosis.
It took me quite some time to figure out nginx rules for cgit
Step 1: install software
We need www/fcgiwrap because nginx doesn't support cgi, but it does support fastcgi
Step 2: configure gitosis
HINT: by default gitosis will use /usr/local/git/ directory. If you want to change that:
I will use /srv/git/ to store gitosis data.
Since we'll need ssh key let's generate one
and save it to ssh-key (private) and ssh-key.pub (public)
Make sure you can copy keys securely. You will need pub key on server, and private key on your desktop pc (or whatever you use)
Now become git user and initialize gitosis (git's home must be writeable by git)
Step 2: Configure /etc/rc.conf
This part is trivial
Don't forget to configure your ssh to
use public/private key authorization
Step 3: Configure nginx
to your /usr/local/etc/nginx/nginx.conf add host config
This is by far best, that I managed to make
here /srv/www/example.lv/git/config.cgit.rc is path to cgit configuration file. Currently I haven't managed to configure nginx to make this parameter variable depending on URL. That's why I use http://aldis.git.bsdroot.lv instead of http://git.bsdroot.lv/aldis
If I want multiple users that has it own "directory" in git, I need to add another subdomain name, like http://killasmurf86.git.bsdroot.lv
TODO: test gitweb, perhaps it's better. I haven't used it yet
P.S.
This is just part of nginx.conf.... rest, is up to you... this is what you need to get cgit work in nginx
Step 4: Configure cgit
cgitrc configuration is described here:
http://hjemli.net/git/cgit/tree/cgitrc.5.txt
I'll give you example config:
This is part of my cgit config on my server....
You should place this file wherever you set CGIT_CONFIG environment variable to point to. In case if this example it should be /srv/www/example.lv/git/config.cgit.rc
The problem here is that if you make new git repository, you need to configure this cgit config in order for new repo to be visible to public (I will test gitweb... it it changes things, I will post alternative config)
Step 5: make new repos, manage users etc....
Now since you're admin of your git repos... you need to clone gitosis-admin.git repository
now in this repository you see:
gitosis.conf, where you configure gitosis and keydir/ - directory where you add public ssh keys
more info at http://wiki.dreamhost.com/Gitosis
What if ssh is running different port?
Git has problem... you can't specify port from which to clone using ssh, however...
you can edit ~/.ssh/config and set port there
for example
Now you can pull, push, clone with ssh using ssh port 12345 
NOTE: make sure /srv/git/repositories/* are www group readable (with gitosis-admin.git execption
References
http://wiki.dreamhost.com/Gitosis
http://hjemli.net/git/cgit/tree/cgitrc.5.txt
P.S.
This is very short description on how to setup git hosting
I didn't go into details of managing repositories, you'll have to figure that out yourself (that's so easy, that I just don't want to waste time, writing)
Read references, they will help
[red]Update[/red]
added clarification where to place cgit.rc
Today I will uncover how to make public git hosting with www/nginx, devel/cgit, devel/py-gitosis.
It took me quite some time to figure out nginx rules for cgit

Step 1: install software
# portmaster www/nginx devel/cgit devel/git devel/py-gitosis www/fcgiwrap
We need www/fcgiwrap because nginx doesn't support cgi, but it does support fastcgi
Step 2: configure gitosis
HINT: by default gitosis will use /usr/local/git/ directory. If you want to change that:
# pw usermod git -h /srv/git
I will use /srv/git/ to store gitosis data.
Since we'll need ssh key let's generate one
# ssh-keygen
and save it to ssh-key (private) and ssh-key.pub (public)
Make sure you can copy keys securely. You will need pub key on server, and private key on your desktop pc (or whatever you use)
Now become git user and initialize gitosis (git's home must be writeable by git)
Code:
# su -l git -c tcsh
$ gitosis-init < /path/to/id_rsa.pub
$ chmod 750 /src/git/repositories/gitosis-admin.git/hooks/post-update
$ exit
Step 2: Configure /etc/rc.conf
This part is trivial
Code:
fcgiwrap_enable="YES"
fcgiwrap_user="www"
nginx_enable="YES"
sshd_enable="YES"
Don't forget to configure your ssh to
use public/private key authorization
Step 3: Configure nginx
to your /usr/local/etc/nginx/nginx.conf add host config
Code:
server {
listen 80;
server_name git.example.lv;
access_log /var/log/git.example.access.log;
root /usr/local/www/cgit;
if (!-f $request_filename) {
rewrite ^/([^?/]+/[^?]*)?(?:\?(.*))?$ /cgit.cgi?url=$1&$2 last;
}
location ~ .*\.cgi$ {
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
fastcgi_param CGIT_CONFIG /srv/www/example.lv/git/config.cgit.rc;
include fastcgi_params;
}
}
here /srv/www/example.lv/git/config.cgit.rc is path to cgit configuration file. Currently I haven't managed to configure nginx to make this parameter variable depending on URL. That's why I use http://aldis.git.bsdroot.lv instead of http://git.bsdroot.lv/aldis
If I want multiple users that has it own "directory" in git, I need to add another subdomain name, like http://killasmurf86.git.bsdroot.lv
TODO: test gitweb, perhaps it's better. I haven't used it yet
P.S.
This is just part of nginx.conf.... rest, is up to you... this is what you need to get cgit work in nginx

Step 4: Configure cgit
cgitrc configuration is described here:
http://hjemli.net/git/cgit/tree/cgitrc.5.txt
I'll give you example config:
Code:
# usr/local/share/doc/cgit/cgitrc.5.txt
#virtual-root=/aldis
virtual-root=/
enable-index-links=1
#enable-log-filecount=1
#enable-log-linecount=1
snapshots=tar.gz tar.bz2
root-title=Public git repositories of Aldis Berjoza
root-desc=
local-time=1
#max-stats=year
#scan-path=/srv/git/repositories/aldis/
section=Assembler
repo.url=asm4BSD
repo.path=/srv/git/repositories/aldis/asm4BSD.git
repo.desc=asm stuff for FreeBSD, OpenBSD, NetBSD and DragonflyBSD
repo.owner=aldis@bsdroot.lv
#repo.readme=README
repo.clone-url=http://aldis.git.bsdroot.lv/asm4BSD/
repo.url=tractor
repo.path=/srv/git/repositories/aldis/tractor.git
repo.desc=Assembler source code of my unfinished sumo robot 'tractor'. Source for Atmega-8 chip
#repo.owner=aldis@bsdroot.lv
#repo.readme=README
repo.clone-url=http://aldis.git.bsdroot.lv/tractor/
You should place this file wherever you set CGIT_CONFIG environment variable to point to. In case if this example it should be /srv/www/example.lv/git/config.cgit.rc
The problem here is that if you make new git repository, you need to configure this cgit config in order for new repo to be visible to public (I will test gitweb... it it changes things, I will post alternative config)
Step 5: make new repos, manage users etc....
Now since you're admin of your git repos... you need to clone gitosis-admin.git repository
Code:
desktop $ git clone git@git.example.com:gitosis-admin.git
gitosis.conf, where you configure gitosis and keydir/ - directory where you add public ssh keys
more info at http://wiki.dreamhost.com/Gitosis
What if ssh is running different port?
Git has problem... you can't specify port from which to clone using ssh, however...
you can edit ~/.ssh/config and set port there
for example
Code:
Host git.example.com
[red]port 12345[/red]
IdentityFile ~/.ssh/git.key
Compression yes

NOTE: make sure /srv/git/repositories/* are www group readable (with gitosis-admin.git execption
References
http://wiki.dreamhost.com/Gitosis
http://hjemli.net/git/cgit/tree/cgitrc.5.txt
P.S.
This is very short description on how to setup git hosting
I didn't go into details of managing repositories, you'll have to figure that out yourself (that's so easy, that I just don't want to waste time, writing)
Read references, they will help

[red]Update[/red]
added clarification where to place cgit.rc