.SH "SYNOPSIS"
.nf
-git\-checkout\-index [\-u] [\-q] [\-a] [\-f] [\-n] [\-\-prefix=<string>]
- [\-\-stage=<number>] [\-\-] <file>...
+\fIgit\-checkout\-index\fR [\-u] [\-q] [\-a] [\-f] [\-n] [\-\-prefix=<string>]
+ [\-\-stage=<number>]
+ [\-z] [\-\-stdin]
+ [\-\-] [<file>]*
.fi
.SH "DESCRIPTION"
\-\-stage=<number>
Instead of checking out unmerged entries, copy out the files from named stage\&. <number> must be between 1 and 3\&.
+.TP
+\-\-stdin
+Instead of taking list of paths from the command line, read list of paths from the standard input\&. Paths are separated by LF (i\&.e\&. one path per line) by default\&.
+
+.TP
+\-z
+Only meaningful with \-\-stdin; paths are separated with NUL character instead of LF\&.
+
.TP
--
Do not interpret any more arguments as options\&.
.IP
$ find \&. \-name '*\&.h' \-print0 | xargs \-0 git\-checkout\-index \-f \-\-
-which will force all existing *\&.h files to be replaced with their cached copies\&. If an empty command line implied "all", then this would force\-refresh everything in the index, which was not the point\&.
+which will force all existing *\&.h files to be replaced with their cached copies\&. If an empty command line implied "all", then this would force\-refresh everything in the index, which was not the point\&. But since git\-checkout\-index accepts \-\-stdin it would be faster to use:
+.IP
+$ find \&. \-name '*\&.h' \-print0 | git\-checkout\-index \-f \-z \-\-stdin
The \-\- is just a good idea when you know the rest will be filenames; it will prevent problems with a filename of, for example, \-a\&. Using \-\- is probably a good policy in scripts\&.
.SH "LIMITATIONS"
-Currently gitcvs only works over ssh connections\&.
+Currently cvsserver works over SSH connections for read/write clients, and over pserver for anonymous CVS access\&.
+
+
+CVS clients cannot tag, branch or perform GIT merges\&.
.SH "INSTALLATION"
.TP 3
1.
-Put server\&.pl somewhere useful on the same machine that is hosting your git repos
+If you are going to offer anonymous CVS access via pserver, add a line in /etc/inetd\&.conf like
+
+.nf
+cvspserver stream tcp nowait nobody git\-cvsserver pserver
+.fi
+
+.nf
+Note: In some cases, you need to pass the 'pserver' argument twice for
+git\-cvsserver to see it\&. So the line would look like
+.fi
+
+.nf
+cvspserver stream tcp nowait nobody git\-cvsserver pserver pserver
+.fi
+
+.nf
+No special setup is needed for SSH access, other than having GIT tools
+in the PATH\&. If you have clients that do not accept the CVS_SERVER
+env variable, you can rename git\-cvsserver to cvs\&.
+.fi
.TP
2.
For each repo that you want accessible from CVS you need to edit config in the repo and add the following section\&.
.nf
[gitcvs]
enabled=1
+ # optional for debugging
logfile=/path/to/logfile
.fi
.nf
-n\&.b\&. you need to ensure each user that is going to invoke server\&.pl has
-write access to the log file\&.
+Note: you need to ensure each user that is going to invoke git\-cvsserver has
+write access to the log file and to the git repository\&. When offering anon
+access via pserver, this means that the nobody user should have write access
+to at least the sqlite database at the root of the repository\&.
.fi
.TP
3.
-On each client machine you need to set the following variables\&. CVSROOT should be set as per normal, but the directory should point at the appropriate git repo\&. CVS_SERVER should be set to the server\&.pl script that has been put on the remote machine\&.
+On the client machine you need to set the following variables\&. CVSROOT should be set as per normal, but the directory should point at the appropriate git repo\&. For example:
+
+.nf
+For SSH access, CVS_SERVER should be set to git\-cvsserver
+.fi
+
+.nf
+Example:
+.fi
+
+.nf
+export CVSROOT=:ext:user@server:/var/git/project\&.git
+export CVS_SERVER=git\-cvsserver
+.fi
.TP
4.
-Clients should now be able to check out modules (where modules are the names of branches in git)\&. $ cvs co \-d mylocaldir master
+For SSH clients that will make commits, make sure their \&.bashrc file sets the GIT_AUTHOR and GIT_COMMITTER variables\&.
+.TP
+5.
+Clients should now be able to check out the project\&. Use the CVS \fImodule\fR name to indicate what GIT \fIhead\fR you want to check out\&. Example:
+
+.nf
+cvs co \-d project\-master master
+.fi
.LP
.SH "ECLIPSE CVS CLIENT NOTES"
.TP 3
1.
-Create a new project from CVS checkout, giving it repository and module
+Select "Create a new project \-> From CVS checkout"
.TP
2.
-Context Menu\->Team\->Share Project...
+Create a new location\&. See the notes below for details on how to choose the right protocol\&.
.TP
3.
-Enter the repository and module information again and click Finish
+Browse the \fImodules\fR available\&. It will give you a list of the heads in the repository\&. You will not be able to browse the tree from there\&. Only the heads\&.
.TP
4.
-The Synchronize view appears\&. Untick "launch commit wizard" to avoid committing the \&.project file, and select HEAD as the tag to synchronize to\&. Update all incoming changes\&.
+Pick \fIHEAD\fR when it asks what branch/tag to check out\&. Untick the "launch commit wizard" to avoid committing the \&.project file\&.
.LP
-Note that most versions of Eclipse ignore CVS_SERVER (which you can set in the Preferences\->Team\->CVS\->ExtConnection pane), so you may have to rename, alias or symlink git\-cvsserver to \fIcvs\fR on the server\&.
+Protocol notes: If you are using anonymous acces via pserver, just select that\&. Those using SSH access should choose the \fIext\fR protocol, and configure \fIext\fR access on the Preferences\->Team\->CVS\->ExtConnection pane\&. Set CVS_SERVER to \fIgit\-cvsserver\fR\&. Not that password support is not good when using \fIext\fR, you will definitely want to have SSH keys setup\&.
+
+
+Alternatively, you can just use the non\-standard extssh protocol that Eclipse offer\&. In that case CVS_SERVER is ignored, and you will have to replace the cvs utility on the server with git\-cvsserver or manipulate your \&.bashrc so that calling \fIcvs\fR effectively calls git\-cvsserver\&.
.SH "CLIENTS KNOWN TO WORK"
.SH "DOCUMENTATION"
-Documentation by Martyn Smith <martyn@catalyst\&.net\&.nz> and Martin Langhoff <martin@catalyst\&.net\&.nz>Matthias Urlichs <smurf@smurf\&.noris\&.de>\&.
+Documentation by Martyn Smith <martyn@catalyst\&.net\&.nz> and Martin Langhoff <martin@catalyst\&.net\&.nz> Matthias Urlichs <smurf@smurf\&.noris\&.de>\&.
.SH "GIT"
Documentation by Junio C Hamano
-.SH "SEE-ALSO"
+.SH "SEE ALSO"
\fBgit\-repack\fR(1) \fBgit\-prune\-packed\fR(1)
.SH "SYNOPSIS"
-git\-pack\-redundant [ \-\-verbose ] [ \-\-alt\-odb ] < \-\-all | \&.pack filename ... >
+\fIgit\-pack\-redundant [ \-\-verbose ] [ \-\-alt\-odb ] < \-\-all | \&.pack filename ... >\fR
.SH "DESCRIPTION"
-This program computes which packs in your repository are redundant\&. The output is suitable for piping to xargs rm if you are in the root of the repository\&.
+This program computes which packs in your repository are redundant\&. The output is suitable for piping to \fIxargs rm\fR if you are in the root of the repository\&.
git\-pack\-redundant accepts a list of objects on standard input\&. Any objects given will be ignored when checking which packs are required\&. This makes the following command useful when wanting to remove packs which contain unreachable objects\&.
-git\-fsck\-objects \-\-full \-\-unreachable | cut \-d \-f3 | git\-pack\-redundant \-\-all | xargs rm
+git\-fsck\-objects \-\-full \-\-unreachable | cut \-d \fI \fR \-f3 | git\-pack\-redundant \-\-all | xargs rm
.SH "OPTIONS"
.SH "AUTHOR"
-Written by Lukas Sandström <lukass@etek\&.chalmers\&.se>
+Written by Lukas Sandström <lukass@etek\&.chalmers\&.se>
.SH "DOCUMENTATION"
-Documentation by Lukas Sandström <lukass@etek\&.chalmers\&.se>
+Documentation by Lukas Sandström <lukass@etek\&.chalmers\&.se>
-.SH "SEE-ALSO"
+.SH "SEE ALSO"
\fBgit\-pack\-objects\fR(1) \fBgit\-repack\fR(1) \fBgit\-prune\-packed\fR(1)
.SH "SYNOPSIS"
-git\-prune\-packed [\-n]
+\fIgit\-prune\-packed\fR [\-n]
.SH "DESCRIPTION"
Documentation by Ryan Anderson <ryan@michonline\&.com>
-.SH "SEE-ALSO"
+.SH "SEE ALSO"
\fBgit\-pack\-objects\fR(1) \fBgit\-repack\fR(1)
Documentation by Ryan Anderson <ryan@michonline\&.com>
-.SH "SEE-ALSO"
+.SH "SEE ALSO"
\fBgit\-pack\-objects\fR(1) \fBgit\-prune\-packed\fR(1)
[ \-\-no\-merges ]
[ \-\-remove\-empty ]
[ \-\-all ]
- [ [ \-\-merge\-order [ \-\-show\-breaks ] ] | [ \-\-topo\-order ] ]
+ [ \-\-topo\-order ]
[ \-\-parents ]
[ [\-\-objects | \-\-objects\-edge] [ \-\-unpacked ] ]
[ \-\-pretty | \-\-header ]
\-\-topo\-order
By default, the commits are shown in reverse chronological order\&. This option makes them appear in topological order (i\&.e\&. descendant commits are shown before their parents)\&.
-.TP
-\-\-merge\-order
-When specified the commit history is decomposed into a unique sequence of minimal, non\-linear epochs and maximal, linear epochs\&. Non\-linear epochs are then linearised by sorting them into merge order, which is described below\&.
-
-Maximal, linear epochs correspond to periods of sequential development\&. Minimal, non\-linear epochs correspond to periods of divergent development followed by a converging merge\&. The theory of epochs is described in more detail at http://blackcubes\&.dyndns\&.org/epoch/: \fIhttp://blackcubes.dyndns.org/epoch/\fR\&.
-
-The merge order for a non\-linear epoch is defined as a linearisation for which the following invariants are true:
-
-.RS
-.TP 3
-1.
-if a commit P is reachable from commit N, commit P sorts after commit N in the linearised list\&.
-.TP
-2.
-if Pi and Pj are any two parents of a merge M (with i < j), then any commit N, such that N is reachable from Pj but not reachable from Pi, sorts before all commits reachable from Pi\&.
-
-Invariant 1 states that later commits appear before earlier commits they are derived from\&.
-
-Invariant 2 states that commits unique to "later" parents in a merge, appear before all commits from "earlier" parents of a merge\&.
-.LP
-.RE
-.IP
-
-.TP
-\-\-show\-breaks
-Each item of the list is output with a 2\-character prefix consisting of one of: (|), (^), (=) followed by a space\&.
-
-Commits marked with (=) represent the boundaries of minimal, non\-linear epochs and correspond either to the start of a period of divergent development or to the end of such a period\&.
-
-Commits marked with (|) are direct parents of commits immediately preceding the marked commit in the list\&.
-
-Commits marked with (^) are not parents of the immediately preceding commit\&. These "breaks" represent necessary discontinuities implied by trying to represent an arbitrary DAG in a linear form\&.
-
-\-\-show\-breaks is only valid if \-\-merge\-order is also specified\&.
-
.SH "AUTHOR"
Written by Linus Torvalds <torvalds@osdl\&.org>
-
-Original \fI\-\-merge\-order\fR logic by Jon Seymour <jon\&.seymour@gmail\&.com>
-
.SH "DOCUMENTATION"