summaryrefslogtreecommitdiff
path: root/doc/rcs/git.mdwn
blob: f97131742518770d30bdaa63bba1af9554d02d36 (plain)

[[meta title="Git"]]

Git is a distributed revison control system originally developed for the Linux kernel. Ikiwiki supports storing a wiki in git.

Ikiwiki can run as a post-update hook to update a wiki whenever commits come in. When running as a [[cgi]] with Git, ikiwiki automatically commits edited pages, and uses the Git history to generate the [[RecentChanges]] page.

git repository setup

When using Git, you probably want to set up two repositories, of which one should be bare (meaning that it does not have a working tree checked out), and the other one with a working tree will be used as ikiwiki's srcdir for compiling the wiki. [[ikiwiki-makerepo]] can automate setting this up. Using a pair of repositories isn't the most obvious set up, but it works the best for typical ikiwiki use. [[tips/Laptop_wiki_with_git]] describes a different way to set up ikiwiki and git.

It is paramount that you never push to the non-bare repository (this FAQ entry explains why). Instead, if you want to work on the wiki from a remote machine, clone the bare repository, using either the git transport (if available), or ssh.

The ikiwiki post-commit hook should be put in the bare repository.

git repository with multiple committers

It can be tricky to get the permissions right to allow multiple people to commit to an ikiwiki git repository. As the [[security]] page mentions, for a secure ikiwiki installation, only one person should be able to write to ikiwiki's srcdir. When other committers make commits, their commits should go to the bare repository, which has a post-update hook that uses ikiwiki to pull the changes to the srcdir.

One setup that will work is to put all committers in a group (say, "ikiwiki"), and use permissions to allow that group to commit to the bare git repository. Make both the post-update hook and ikiwiki.cgi be setgid to the group, as well as suid to the user who admins the wiki. The wrappergroup [[setup_file_option|usage]] can be used to make the wrappers be setgid to the right group. Then the srcdir, including its git repository, should only be writable by the wiki's admin, and not by the group. Take care that ikiwiki uses a umask that does not cause files in the srcdir to become group writable. (umask 022 will work.)