'\" t
.\" Title: git-checkout-index
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.75.2
.\" Date: 05/09/2012
.\" Manual: Git Manual
.\" Source: Git 1.5.4.2
.\" Language: English
.\"
.TH "GIT\-CHECKOUT\-INDEX" "1" "05/09/2012" "Git 1\&.5\&.4\&.2" "Git Manual"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-checkout-index \- Copy files from the index to the working tree
.SH "SYNOPSIS"
.sp
.nf
\fIgit\-checkout\-index\fR [\-u] [\-q] [\-a] [\-f] [\-n] [\-\-prefix=]
[\-\-stage=|all]
[\-\-temp]
[\-z] [\-\-stdin]
[\-\-] []\e*
.fi
.SH "DESCRIPTION"
Will copy all files listed from the index to the working directory (not overwriting existing files)\&.
.SH "OPTIONS"
.PP
\-u|\-\-index
.RS 4
update stat information for the checked out entries in the index file\&.
.RE
.PP
\-q|\-\-quiet
.RS 4
be quiet if files exist or are not in the index
.RE
.PP
\-f|\-\-force
.RS 4
forces overwrite of existing files
.RE
.PP
\-a|\-\-all
.RS 4
checks out all files in the index\&. Cannot be used together with explicit filenames\&.
.RE
.PP
\-n|\-\-no\-create
.RS 4
Don\(cqt checkout new files, only refresh files already checked out\&.
.RE
.PP
\-\-prefix=
.RS 4
When creating files, prepend (usually a directory including a trailing /)
.RE
.PP
\-\-stage=|all
.RS 4
Instead of checking out unmerged entries, copy out the files from named stage\&. must be between 1 and 3\&. Note: \-\-stage=all automatically implies \-\-temp\&.
.RE
.PP
\-\-temp
.RS 4
Instead of copying the files to the working directory write the content to temporary files\&. The temporary name associations will be written to stdout\&.
.RE
.PP
\-\-stdin
.RS 4
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\&.
.RE
.PP
\-z
.RS 4
Only meaningful with \-\-stdin; paths are separated with NUL character instead of LF\&.
.RE
.PP
\-\-
.RS 4
Do not interpret any more arguments as options\&.
.RE
The order of the flags used to matter, but not anymore\&.
Just doing git\-checkout\-index does nothing\&. You probably meant git\-checkout\-index \-a\&. And if you want to force it, you want git\-checkout\-index \-f \-a\&.
Intuitiveness is not the goal here\&. Repeatability is\&. The reason for the "no arguments means no work" behavior is that from scripts you are supposed to be able to do:
.sp
.if n \{\
.RS 4
.\}
.nf
\&.ft C
$ find \&. \-name \'*\&.h\' \-print0 | xargs \-0 git\-checkout\-index \-f \-\-
\&.ft
.fi
.if n \{\
.RE
.\}
.sp
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:
.sp
.if n \{\
.RS 4
.\}
.nf
\&.ft C
$ find \&. \-name \'*\&.h\' \-print0 | git\-checkout\-index \-f \-z \-\-stdin
\&.ft
.fi
.if n \{\
.RE
.\}
.sp
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 "USING --TEMP OR --STAGE=ALL"
When \-\-temp is used (or implied by \-\-stage=all) git\-checkout\-index will create a temporary file for each index entry being checked out\&. The index will not be updated with stat information\&. These options can be useful if the caller needs all stages of all unmerged entries so that the unmerged files can be processed by an external merge tool\&.
A listing will be written to stdout providing the association of temporary file names to tracked path names\&. The listing format has two variations:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
tempname TAB path RS
The first format is what gets used when \-\-stage is omitted or is not \-\-stage=all\&. The field tempname is the temporary file name holding the file content and path is the tracked path name in the index\&. Only the requested entries are output\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
stage1temp SP stage2temp SP stage3tmp TAB path RS
The second format is what gets used when \-\-stage=all\&. The three stage temporary fields (stage1temp, stage2temp, stage3temp) list the name of the temporary file if there is a stage entry in the index or \&. if there is no stage entry\&. Paths which only have a stage 0 entry will always be omitted from the output\&.
.RE
In both formats RS (the record separator) is newline by default but will be the null byte if \-z was passed on the command line\&. The temporary file names are always safe strings; they will never contain directory separators or whitespace characters\&. The path field is always relative to the current directory and the temporary file names are always relative to the top level directory\&.
If the object being copied out to a temporary file is a symbolic link the content of the link will be written to a normal file\&. It is up to the end\-user or the Porcelain to make use of this information\&.
.SH "EXAMPLES"
.PP
To update and refresh only the files already checked out
.RS 4
.sp
.if n \{\
.RS 4
.\}
.nf
\&.ft C
$ git\-checkout\-index \-n \-f \-a && git\-update\-index \-\-ignore\-missing \-\-refresh
\&.ft
.fi
.if n \{\
.RE
.\}
.RE
.PP
Using git\-checkout\-index to "export an entire tree"
.RS 4
The prefix ability basically makes it trivial to use git\-checkout\-index as an "export as tree" function\&. Just read the desired tree into the index, and do:
.sp
.if n \{\
.RS 4
.\}
.nf
\&.ft C
$ git\-checkout\-index \-\-prefix=git\-export\-dir/ \-a
\&.ft
.fi
.if n \{\
.RE
.\}
.sp
git\-checkout\-index will "export" the index into the specified directory\&.
The final "/" is important\&. The exported name is literally just prefixed with the specified string\&. Contrast this with the following example\&.
.RE
.PP
Export files with a prefix
.RS 4
.sp
.if n \{\
.RS 4
.\}
.nf
\&.ft C
$ git\-checkout\-index \-\-prefix=\&.merged\- Makefile
\&.ft
.fi
.if n \{\
.RE
.\}
.sp
This will check out the currently cached copy of Makefile into the file \&.merged\-Makefile\&.
.RE
.SH "AUTHOR"
Written by Linus Torvalds
.SH "DOCUMENTATION"
Documentation by David Greaves, Junio C Hamano and the git\-list \&.
.SH "GIT"
Part of the linkgit:git[7] suite
.SH "NOTES"
.IP " 1." 4
torvalds@osdl.org
.RS 4
\%mailto:torvalds@osdl.org
.RE
.IP " 2." 4
git@vger.kernel.org
.RS 4
\%mailto:git@vger.kernel.org
.RE