cgit

This page contains a comprehensive guide to setting up cgit on NearlyFreeSpeech.

Important: It is assumed that you already have an account with NFS and also have access to a “site” online.

Most of the following has been lifted from NearlyFreeSpeech cgit application walkthrough but has been tweaked and updated.

You can see a live version here.

Setup git Repostories

The first thing we need to do is setting up our git repos, with the ability for the public to clone our projects. Each one of your project repos will need to follow this same procedure.

Make sure to change your “domain” folder accordingly.

cd /home/public/git.btxx.org

mkdir myproject.git
cd myproject.git

git init --bare

# Configure for HTTP access
git config http.getanyfile true
git config http.uploadpack true

# Update server info (crucial for HTTP cloning)
git update-server-info

# Set up the post-update hook
cat > hooks/post-update << 'EOF'
#!/bin/sh
exec git update-server-info
EOF

chmod +x hooks/post-update

Then make sure to include the following .htaccess file at the root of your domain folder (ie. git.btxx.org/):

SetEnv GIT_PROJECT_ROOT /home/public/git.btxx.org
SetEnv GIT_HTTP_EXPORT_ALL

Now you can test this locally by running:

git clone https://git.btxx.org/myproject.git

Building cgit

The following assumes that you wish to have cgit running at the top-level of your chosen domain (ie. git.example.com)

SSH into your account then download and unpack the latest release:

git clone git://git.zx2c4.com/cgit cgit-src
cd cgit-src

Create a cgit.conf file with desired locations:

CGIT_SCRIPT_PATH = /home/public
CGIT_DATA_PATH = $(CGIT_SCRIPT_PATH)
CGIT_CONFIG = $(CGIT_SCRIPT_PATH)/cgitrc
CACHE_ROOT = $(CGIT_SCRIPT_PATH)/cgitcache
prefix = $(CGIT_SCRIPT_PATH)/local

Get the git sources (needed to build libgit):

git submodule init
git submodule update

Build and install it:

gmake install

Configuration

Make a text file named cgitrc where you specified CGIT_CONFIG and add the following (these are some personal defaults to make things cleaner):

logo=/cgit.png
root-title=main root title
root-desc=description for your git server
root-readme=/home/public/about.md
virtual-root=/

about-filter=/home/public/cgit-src/filters/about-formatting.sh
readme=:README.md
readme=:README

include=/home/protected/cgitrepos

Then in the specified file (cgitrepos), place your repos, ex:

repo.url=MyRepo
repo.path=/home/public/MyRepo.git
repo.desc=This is my git repository

And you should be good to go!