diff --git a/conf/example.conf b/conf/example.conf index b0776b7..d48163f 100644 --- a/conf/example.conf +++ b/conf/example.conf @@ -106,6 +106,14 @@ repo gitolite repo @oss_repos R = @all + # set permissions to all already defined repos + # (a repository is defined if it has permission rules + # associated, empty "repo" stanza or "@group=..." line is + # not enough). *Please* do see doc/3-faq-tips-etc.mkd for + # some important notes on this feature +repo @all + RW+ = @admins + # ADVANCED PERMISSIONS USING REFEXES # - refexes are specified in perl regex syntax diff --git a/doc/3-faq-tips-etc.mkd b/doc/3-faq-tips-etc.mkd index aacea24..32b8d7d 100644 --- a/doc/3-faq-tips-etc.mkd +++ b/doc/3-faq-tips-etc.mkd @@ -5,6 +5,10 @@ In this document: * common errors and mistakes * git version dependency * other errors, warnings, notes... + * ssh-copy-id + * cloning an empty repo + * `@all` syntax for repos + * umask setting * getting a tar file from a clone * differences from gitosis * simpler syntax @@ -77,38 +81,58 @@ normal way, since it's not empty anymore. ### other errors, warnings, notes... - * don't have `ssh-copy-id`? This is broadly what that command does, if you - want to replicate it manually. The input is your pubkey, typically - `~/.ssh/id_rsa.pub` from your client/workstation. +#### ssh-copy-id - * it copies it to the server as some file +don't have `ssh-copy-id`? This is broadly what that command does, if you want +to replicate it manually. The input is your pubkey, typically +`~/.ssh/id_rsa.pub` from your client/workstation. - * it appends that file to `~/.ssh/authorized_keys` on the server - (creating it if it doesn't already exist) + * it copies it to the server as some file - * it then makes sure that all these files/directories have go-w perms - set (assuming user is "git"): + * it appends that file to `~/.ssh/authorized_keys` on the server + (creating it if it doesn't already exist) - /home/git/.ssh/authorized_keys - /home/git/.ssh - /home/git + * it then makes sure that all these files/directories have go-w perms + set (assuming user is "git"): - [Actually, sshd requires that even directories *above* ~ (/, /home, - typically) also must be `go-w`, but that needs root. And typically - they're already set that way anyway. (Or if they're not, you've got - bigger problems than gitolite install not working!)] + /home/git/.ssh/authorized_keys + /home/git/.ssh + /home/git - * cloning an empty repo is only possible with clients greater than 1.6.2. - So at least one of your clients needs to have a recent git. Once at least - one commit has been made, older clients can also use it +[Actually, sshd requires that even directories *above* ~ (/, /home, +typically) also must be `go-w`, but that needs root. And typically +they're already set that way anyway. (Or if they're not, you've got +bigger problems than gitolite install not working!)] - * when you clone an empty repo, git seems to complain about `fatal: The - remote end hung up unexpectedly`. However, you can ignore this, since it - doesn't seem to hurt anything. [Update 2009-09-14; this has been fixed in - git 1.6.4.3] +#### cloning an empty repo - * gitweb not able to read your repos? You can change the umask for newly - created repos to something more relaxed -- see the `~/.gitolite.rc` file +Cloning an empty repo is only possible with clients greater than 1.6.2. So at +least one of your clients needs to have a recent git. Once at least one +commit has been made, older clients can also use it + +When you clone an empty repo, git seems to complain about `fatal: The remote +end hung up unexpectedly`. However, you can ignore this, since it doesn't +seem to hurt anything. [Update 2009-09-14; this has been fixed in git +1.6.4.3] + +#### `@all` syntax for repos + +There *is* a way to use the `@all` syntax for repos also, as described in +`conf/example.conf`. However, there is an important difference between this +and the old `@all` (for users): + + * `@all` for repos is immediately expanded, when found, into the currently + known list of repos. "Currently" means upto this point in the config + file, and "known" means having some user with some permissions associated + with the repo! + + * This means that if you really want *all* repos, you'd better put this para + at the **end** of the config file! + +#### umask setting + +Gitweb not able to read your repos? You can change the umask for newly +created repos to something more relaxed -- see the `~/.gitolite.rc` file ### getting a tar file from a clone diff --git a/doc/6-ssh-troubleshooting.mkd b/doc/6-ssh-troubleshooting.mkd index 2b9febc..4bf980f 100644 --- a/doc/6-ssh-troubleshooting.mkd +++ b/doc/6-ssh-troubleshooting.mkd @@ -148,8 +148,9 @@ Here's how it all hangs together. Luckily, ssh has a very convenient way of capturing all the connection information (username, hostname, port number (if it's not the default 22), - and keypair to be used) in one "paragraph". This is what the para looks - like for us (the easy install script puts it there the first time): + and keypair to be used) in one "paragraph" of `~/.ssh/config`. This is + what the para looks like for us (the easy install script puts it there the + first time): host gitolite user git diff --git a/src/gl-compile-conf b/src/gl-compile-conf index 7d8e1d9..26da915 100755 --- a/src/gl-compile-conf +++ b/src/gl-compile-conf @@ -193,8 +193,11 @@ sub parse_conf_file { # grab the list and expand any @stuff in it @repos = split ' ', $1; - @repos = expand_list ( @repos ); - + if (@repos == 1 and $repos[0] eq '@all') { + @repos = keys %repos; + } else { + @repos = expand_list ( @repos ); + } s/\bCREAT[EO]R\b/\$creater/g for @repos; } # actual permission line