Added documentation for few missing options.
More $ shell prompts in examples. Minor English grammar improvements. Added a few "See Also"s. Use back-ticks on more command examples. Signed-off-by: Jon Loeliger <jdl@freescale.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
23c99d8460
commit
61f693bd5a
@ -45,53 +45,71 @@ OPTIONS
|
|||||||
|
|
||||||
The order of the flags used to matter, but not anymore.
|
The order of the flags used to matter, but not anymore.
|
||||||
|
|
||||||
Just doing "git-checkout-index" does nothing. You probably meant
|
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 -a`. And if you want to force it, you want
|
||||||
"git-checkout-index -f -a".
|
`git-checkout-index -f -a`.
|
||||||
|
|
||||||
Intuitiveness is not the goal here. Repeatability is. The reason for
|
Intuitiveness is not the goal here. Repeatability is. The reason for
|
||||||
the "no arguments means no work" thing is that from scripts you are
|
the "no arguments means no work" behavior is that from scripts you are
|
||||||
supposed to be able to do things like:
|
supposed to be able to do:
|
||||||
|
|
||||||
find . -name '*.h' -print0 | xargs -0 git-checkout-index -f --
|
----------------
|
||||||
|
$ find . -name '*.h' -print0 | xargs -0 git-checkout-index -f --
|
||||||
|
----------------
|
||||||
|
|
||||||
which will force all existing `*.h` files to be replaced with their
|
which will force all existing `*.h` files to be replaced with their
|
||||||
cached copies. If an empty command line implied "all", then this would
|
cached copies. If an empty command line implied "all", then this would
|
||||||
force-refresh everything in the index, which was not the point.
|
force-refresh everything in the index, which was not the point.
|
||||||
|
|
||||||
To update and refresh only the files already checked out:
|
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.
|
||||||
|
|
||||||
git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
|
|
||||||
|
|
||||||
Oh, and the "--" is just a good idea when you know the rest will be
|
EXAMPLES
|
||||||
filenames. Just so that you wouldn't have a filename of "-a" causing
|
--------
|
||||||
problems (not possible in the above example, but get used to it in
|
To update and refresh only the files already checked out::
|
||||||
scripting!).
|
+
|
||||||
|
----------------
|
||||||
|
$ git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
|
||||||
|
----------------
|
||||||
|
|
||||||
The prefix ability basically makes it trivial to use
|
Using `git-checkout-index` to "export an entire tree"::
|
||||||
git-checkout-index as an "export as tree" function. Just read the
|
The prefix ability basically makes it trivial to use
|
||||||
desired tree into the index, and do a
|
`git-checkout-index` as an "export as tree" function.
|
||||||
|
Just read the desired tree into the index, and do:
|
||||||
git-checkout-index --prefix=git-export-dir/ -a
|
+
|
||||||
|
----------------
|
||||||
and git-checkout-index will "export" the index into the specified
|
$ git-checkout-index --prefix=git-export-dir/ -a
|
||||||
|
----------------
|
||||||
|
+
|
||||||
|
`git-checkout-index` will "export" the index into the specified
|
||||||
directory.
|
directory.
|
||||||
|
+
|
||||||
|
The final "/" is important. The exported name is literally just
|
||||||
|
prefixed with the specified string. Contrast this with the
|
||||||
|
following example.
|
||||||
|
|
||||||
NOTE The final "/" is important. The exported name is literally just
|
Export files with a prefix::
|
||||||
prefixed with the specified string, so you can also do something like
|
+
|
||||||
|
----------------
|
||||||
|
$ git-checkout-index --prefix=.merged- Makefile
|
||||||
|
----------------
|
||||||
|
+
|
||||||
|
This will check out the currently cached copy of `Makefile`
|
||||||
|
into the file `.merged-Makefile`.
|
||||||
|
|
||||||
git-checkout-index --prefix=.merged- Makefile
|
|
||||||
|
|
||||||
to check out the currently cached copy of `Makefile` into the file
|
|
||||||
`.merged-Makefile`
|
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
Written by Linus Torvalds <torvalds@osdl.org>
|
Written by Linus Torvalds <torvalds@osdl.org>
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
--------------
|
--------------
|
||||||
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
|
Documentation by David Greaves,
|
||||||
|
Junio C Hamano and the git-list <git@vger.kernel.org>.
|
||||||
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
---
|
---
|
||||||
|
@ -8,7 +8,14 @@ git-init-db - Creates an empty git repository
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-init-db'
|
'git-init-db' [--template=<template_directory>]
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-------
|
||||||
|
--template=<template_directory>::
|
||||||
|
Provide the directory in from which templates will be used.
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -16,14 +23,26 @@ This simply creates an empty git repository - basically a `.git` directory
|
|||||||
and `.git/object/??/`, `.git/refs/heads` and `.git/refs/tags` directories,
|
and `.git/object/??/`, `.git/refs/heads` and `.git/refs/tags` directories,
|
||||||
and links `.git/HEAD` symbolically to `.git/refs/heads/master`.
|
and links `.git/HEAD` symbolically to `.git/refs/heads/master`.
|
||||||
|
|
||||||
If the 'GIT_DIR' environment variable is set then it specifies a path
|
If the `$GIT_DIR` environment variable is set then it specifies a path
|
||||||
to use instead of `./.git` for the base of the repository.
|
to use instead of `./.git` for the base of the repository.
|
||||||
|
|
||||||
If the object storage directory is specified via the 'GIT_OBJECT_DIRECTORY'
|
If the object storage directory is specified via the `$GIT_OBJECT_DIRECTORY`
|
||||||
environment variable then the sha1 directories are created underneath -
|
environment variable then the sha1 directories are created underneath -
|
||||||
otherwise the default `$GIT_DIR/objects` directory is used.
|
otherwise the default `$GIT_DIR/objects` directory is used.
|
||||||
|
|
||||||
"git-init-db" won't hurt an existing repository.
|
`git-init-db` won't hurt an existing repository.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
Start a new git repository for an existing code base::
|
||||||
|
+
|
||||||
|
----------------
|
||||||
|
$ cd /path/to/my/codebase
|
||||||
|
$ git-init-db
|
||||||
|
----------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Author
|
Author
|
||||||
|
@ -9,19 +9,22 @@ residing in a pack file.
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-prune-packed'
|
'git-prune-packed' [-n]
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
This program search the GIT_OBJECT_DIR for all objects that currently exist in
|
This program search the `$GIT_OBJECT_DIR` for all objects that currently
|
||||||
a pack file as well as the independent object directories.
|
exist in a pack file as well as the independent object directories.
|
||||||
|
|
||||||
All such extra objects are removed.
|
All such extra objects are removed.
|
||||||
|
|
||||||
A pack is a collection of objects, individually compressed, with delta
|
A pack is a collection of objects, individually compressed, with delta
|
||||||
compression applied, stored in a single file, with an associated index file.
|
compression applied, stored in a single file, with an associated index file.
|
||||||
|
|
||||||
Packs are used to reduce the load on mirror systems, backup engines, disk storage, etc.
|
Packs are used to reduce the load on mirror systems, backup engines,
|
||||||
|
disk storage, etc.
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
|
@ -15,15 +15,15 @@ DESCRIPTION
|
|||||||
-----------
|
-----------
|
||||||
Reads the tree information given by <tree-ish> into the index,
|
Reads the tree information given by <tree-ish> into the index,
|
||||||
but does not actually *update* any of the files it "caches". (see:
|
but does not actually *update* any of the files it "caches". (see:
|
||||||
git-checkout-index)
|
gitlink:git-checkout-index[1])
|
||||||
|
|
||||||
Optionally, it can merge a tree into the index, perform a
|
Optionally, it can merge a tree into the index, perform a
|
||||||
fast-forward (i.e. 2-way) merge, or a 3-way merge, with the -m
|
fast-forward (i.e. 2-way) merge, or a 3-way merge, with the `-m`
|
||||||
flag. When used with -m, the -u flag causes it to also update
|
flag. When used with `-m`, the `-u` flag causes it to also update
|
||||||
the files in the work tree with the result of the merge.
|
the files in the work tree with the result of the merge.
|
||||||
|
|
||||||
Trivial merges are done by "git-read-tree" itself. Only conflicting paths
|
Trivial merges are done by `git-read-tree` itself. Only conflicting paths
|
||||||
will be in unmerged state when "git-read-tree" returns.
|
will be in unmerged state when `git-read-tree` returns.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
@ -56,7 +56,7 @@ OPTIONS
|
|||||||
|
|
||||||
Merging
|
Merging
|
||||||
-------
|
-------
|
||||||
If '-m' is specified, "git-read-tree" can perform 3 kinds of
|
If `-m` is specified, `git-read-tree` can perform 3 kinds of
|
||||||
merge, a single tree merge if only 1 tree is given, a
|
merge, a single tree merge if only 1 tree is given, a
|
||||||
fast-forward merge with 2 trees, or a 3-way merge if 3 trees are
|
fast-forward merge with 2 trees, or a 3-way merge if 3 trees are
|
||||||
provided.
|
provided.
|
||||||
@ -65,23 +65,23 @@ provided.
|
|||||||
Single Tree Merge
|
Single Tree Merge
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
If only 1 tree is specified, git-read-tree operates as if the user did not
|
If only 1 tree is specified, git-read-tree operates as if the user did not
|
||||||
specify '-m', except that if the original index has an entry for a
|
specify `-m`, except that if the original index has an entry for a
|
||||||
given pathname, and the contents of the path matches with the tree
|
given pathname, and the contents of the path matches with the tree
|
||||||
being read, the stat info from the index is used. (In other words, the
|
being read, the stat info from the index is used. (In other words, the
|
||||||
index's stat()s take precedence over the merged tree's).
|
index's stat()s take precedence over the merged tree's).
|
||||||
|
|
||||||
That means that if you do a "git-read-tree -m <newtree>" followed by a
|
That means that if you do a `git-read-tree -m <newtree>` followed by a
|
||||||
"git-checkout-index -f -u -a", the "git-checkout-index" only checks out
|
`git-checkout-index -f -u -a`, the `git-checkout-index` only checks out
|
||||||
the stuff that really changed.
|
the stuff that really changed.
|
||||||
|
|
||||||
This is used to avoid unnecessary false hits when "git-diff-files" is
|
This is used to avoid unnecessary false hits when `git-diff-files` is
|
||||||
run after git-read-tree.
|
run after `git-read-tree`.
|
||||||
|
|
||||||
|
|
||||||
Two Tree Merge
|
Two Tree Merge
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Typically, this is invoked as "git-read-tree -m $H $M", where $H
|
Typically, this is invoked as `git-read-tree -m $H $M`, where $H
|
||||||
is the head commit of the current repository, and $M is the head
|
is the head commit of the current repository, and $M is the head
|
||||||
of a foreign tree, which is simply ahead of $H (i.e. we are in a
|
of a foreign tree, which is simply ahead of $H (i.e. we are in a
|
||||||
fast forward situation).
|
fast forward situation).
|
||||||
@ -94,7 +94,7 @@ the following:
|
|||||||
|
|
||||||
2. The user wants to fast-forward to $M.
|
2. The user wants to fast-forward to $M.
|
||||||
|
|
||||||
In this case, the "git-read-tree -m $H $M" command makes sure
|
In this case, the `git-read-tree -m $H $M` command makes sure
|
||||||
that no local change is lost as the result of this "merge".
|
that no local change is lost as the result of this "merge".
|
||||||
Here are the "carry forward" rules:
|
Here are the "carry forward" rules:
|
||||||
|
|
||||||
@ -141,13 +141,13 @@ operating under the -u flag.
|
|||||||
|
|
||||||
When this form of git-read-tree returns successfully, you can
|
When this form of git-read-tree returns successfully, you can
|
||||||
see what "local changes" you made are carried forward by running
|
see what "local changes" you made are carried forward by running
|
||||||
"git-diff-index --cached $M". Note that this does not
|
`git-diff-index --cached $M`. Note that this does not
|
||||||
necessarily match "git-diff-index --cached $H" would have
|
necessarily match `git-diff-index --cached $H` would have
|
||||||
produced before such a two tree merge. This is because of cases
|
produced before such a two tree merge. This is because of cases
|
||||||
18 and 19 --- if you already had the changes in $M (e.g. maybe
|
18 and 19 --- if you already had the changes in $M (e.g. maybe
|
||||||
you picked it up via e-mail in a patch form), "git-diff-index
|
you picked it up via e-mail in a patch form), `git-diff-index
|
||||||
--cached $H" would have told you about the change before this
|
--cached $H` would have told you about the change before this
|
||||||
merge, but it would not show in "git-diff-index --cached $M"
|
merge, but it would not show in `git-diff-index --cached $M`
|
||||||
output after two-tree merge.
|
output after two-tree merge.
|
||||||
|
|
||||||
|
|
||||||
@ -156,18 +156,20 @@ output after two-tree merge.
|
|||||||
Each "index" entry has two bits worth of "stage" state. stage 0 is the
|
Each "index" entry has two bits worth of "stage" state. stage 0 is the
|
||||||
normal one, and is the only one you'd see in any kind of normal use.
|
normal one, and is the only one you'd see in any kind of normal use.
|
||||||
|
|
||||||
However, when you do "git-read-tree" with three trees, the "stage"
|
However, when you do `git-read-tree` with three trees, the "stage"
|
||||||
starts out at 1.
|
starts out at 1.
|
||||||
|
|
||||||
This means that you can do
|
This means that you can do
|
||||||
|
|
||||||
git-read-tree -m <tree1> <tree2> <tree3>
|
----------------
|
||||||
|
$ git-read-tree -m <tree1> <tree2> <tree3>
|
||||||
|
----------------
|
||||||
|
|
||||||
and you will end up with an index with all of the <tree1> entries in
|
and you will end up with an index with all of the <tree1> entries in
|
||||||
"stage1", all of the <tree2> entries in "stage2" and all of the
|
"stage1", all of the <tree2> entries in "stage2" and all of the
|
||||||
<tree3> entries in "stage3".
|
<tree3> entries in "stage3".
|
||||||
|
|
||||||
Furthermore, "git-read-tree" has special-case logic that says: if you see
|
Furthermore, `git-read-tree` has special-case logic that says: if you see
|
||||||
a file that matches in all respects in the following states, it
|
a file that matches in all respects in the following states, it
|
||||||
"collapses" back to "stage0":
|
"collapses" back to "stage0":
|
||||||
|
|
||||||
@ -180,7 +182,7 @@ a file that matches in all respects in the following states, it
|
|||||||
- stage 1 and stage 3 are the same and stage 2 is different take
|
- stage 1 and stage 3 are the same and stage 2 is different take
|
||||||
stage 2 (some work has been done on stage 2)
|
stage 2 (some work has been done on stage 2)
|
||||||
|
|
||||||
The "git-write-tree" command refuses to write a nonsensical tree, and it
|
The `git-write-tree` command refuses to write a nonsensical tree, and it
|
||||||
will complain about unmerged entries if it sees a single entry that is not
|
will complain about unmerged entries if it sees a single entry that is not
|
||||||
stage 0.
|
stage 0.
|
||||||
|
|
||||||
@ -220,8 +222,8 @@ populated. Here is an outline of how the algorithm works:
|
|||||||
matching "stage1" entry if it exists too. .. all the normal
|
matching "stage1" entry if it exists too. .. all the normal
|
||||||
trivial rules ..
|
trivial rules ..
|
||||||
|
|
||||||
You would normally use "git-merge-index" with supplied
|
You would normally use `git-merge-index` with supplied
|
||||||
"git-merge-one-file" to do this last step. The script
|
`git-merge-one-file` to do this last step. The script
|
||||||
does not touch the files in the work tree, and the entire merge
|
does not touch the files in the work tree, and the entire merge
|
||||||
happens in the index file. In other words, there is no need to
|
happens in the index file. In other words, there is no need to
|
||||||
worry about what is in the working directory, since it is never
|
worry about what is in the working directory, since it is never
|
||||||
@ -239,27 +241,33 @@ This is done to prevent you from losing your work-in-progress
|
|||||||
changes. To illustrate, suppose you start from what has been
|
changes. To illustrate, suppose you start from what has been
|
||||||
commited last to your repository:
|
commited last to your repository:
|
||||||
|
|
||||||
$ JC=`git-rev-parse --verify "HEAD^0"`
|
----------------
|
||||||
$ git-checkout-index -f -u -a $JC
|
$ JC=`git-rev-parse --verify "HEAD^0"`
|
||||||
|
$ git-checkout-index -f -u -a $JC
|
||||||
|
----------------
|
||||||
|
|
||||||
You do random edits, without running git-update-index. And then
|
You do random edits, without running git-update-index. And then
|
||||||
you notice that the tip of your "upstream" tree has advanced
|
you notice that the tip of your "upstream" tree has advanced
|
||||||
since you pulled from him:
|
since you pulled from him:
|
||||||
|
|
||||||
$ git-fetch rsync://.... linus
|
----------------
|
||||||
$ LT=`cat .git/MERGE_HEAD`
|
$ git-fetch rsync://.... linus
|
||||||
|
$ LT=`cat .git/MERGE_HEAD`
|
||||||
|
----------------
|
||||||
|
|
||||||
Your work tree is still based on your HEAD ($JC), but you have
|
Your work tree is still based on your HEAD ($JC), but you have
|
||||||
some edits since. Three-way merge makes sure that you have not
|
some edits since. Three-way merge makes sure that you have not
|
||||||
added or modified index entries since $JC, and if you haven't,
|
added or modified index entries since $JC, and if you haven't,
|
||||||
then does the right thing. So with the following sequence:
|
then does the right thing. So with the following sequence:
|
||||||
|
|
||||||
$ git-read-tree -m -u `git-merge-base $JC $LT` $JC $LT
|
----------------
|
||||||
$ git-merge-index git-merge-one-file -a
|
$ git-read-tree -m -u `git-merge-base $JC $LT` $JC $LT
|
||||||
$ echo "Merge with Linus" | \
|
$ git-merge-index git-merge-one-file -a
|
||||||
|
$ echo "Merge with Linus" | \
|
||||||
git-commit-tree `git-write-tree` -p $JC -p $LT
|
git-commit-tree `git-write-tree` -p $JC -p $LT
|
||||||
|
----------------
|
||||||
|
|
||||||
what you would commit is a pure merge between $JC and LT without
|
what you would commit is a pure merge between $JC and $LT without
|
||||||
your work-in-progress changes, and your work tree would be
|
your work-in-progress changes, and your work tree would be
|
||||||
updated to the result of the merge.
|
updated to the result of the merge.
|
||||||
|
|
||||||
|
@ -123,7 +123,9 @@ merging.
|
|||||||
|
|
||||||
To pretend you have a file with mode and sha1 at path, say:
|
To pretend you have a file with mode and sha1 at path, say:
|
||||||
|
|
||||||
$ git-update-index --cacheinfo mode sha1 path
|
----------------
|
||||||
|
$ git-update-index --cacheinfo mode sha1 path
|
||||||
|
----------------
|
||||||
|
|
||||||
'--info-only' is used to register files without placing them in the object
|
'--info-only' is used to register files without placing them in the object
|
||||||
database. This is useful for status-only repositories.
|
database. This is useful for status-only repositories.
|
||||||
@ -138,7 +140,9 @@ Examples
|
|||||||
--------
|
--------
|
||||||
To update and refresh only the files already checked out:
|
To update and refresh only the files already checked out:
|
||||||
|
|
||||||
git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
|
----------------
|
||||||
|
$ git-checkout-index -n -f -a && git-update-index --ignore-missing --refresh
|
||||||
|
----------------
|
||||||
|
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
@ -146,12 +150,18 @@ Configuration
|
|||||||
|
|
||||||
The command honors `core.filemode` configuration variable. If
|
The command honors `core.filemode` configuration variable. If
|
||||||
your repository is on an filesystem whose executable bits are
|
your repository is on an filesystem whose executable bits are
|
||||||
unreliable, this should be set to 'false'. This causes the
|
unreliable, this should be set to 'false' (see gitlink:git-repo-config[1]).
|
||||||
command to ignore differences in file modes recorded in the
|
This causes the command to ignore differences in file modes recorded
|
||||||
index and the file mode on the filesystem if they differ only on
|
in the index and the file mode on the filesystem if they differ only on
|
||||||
executable bit. On such an unfortunate filesystem, you may
|
executable bit. On such an unfortunate filesystem, you may
|
||||||
need to use `git-update-index --chmod=`.
|
need to use `git-update-index --chmod=`.
|
||||||
|
|
||||||
|
|
||||||
|
See Also
|
||||||
|
--------
|
||||||
|
gitlink:git-repo-config[1]
|
||||||
|
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
Written by Linus Torvalds <torvalds@osdl.org>
|
Written by Linus Torvalds <torvalds@osdl.org>
|
||||||
|
@ -14,19 +14,21 @@ DESCRIPTION
|
|||||||
-----------
|
-----------
|
||||||
Creates a tree object using the current index.
|
Creates a tree object using the current index.
|
||||||
|
|
||||||
The index must be merged.
|
The index must be in a fully merged state.
|
||||||
|
|
||||||
Conceptually, "git-write-tree" sync()s the current index contents
|
Conceptually, `git-write-tree` sync()s the current index contents
|
||||||
into a set of tree files.
|
into a set of tree files.
|
||||||
In order to have that match what is actually in your directory right
|
In order to have that match what is actually in your directory right
|
||||||
now, you need to have done a "git-update-index" phase before you did the
|
now, you need to have done a `git-update-index` phase before you did the
|
||||||
"git-write-tree".
|
`git-write-tree`.
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
--missing-ok::
|
--missing-ok::
|
||||||
Normally "git-write-tree" ensures that the objects referenced by the
|
Normally `git-write-tree` ensures that the objects referenced by the
|
||||||
directory exist in the object database. This option disables this check.
|
directory exist in the object database. This option disables this
|
||||||
|
check.
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
|
Loading…
Reference in New Issue
Block a user