Merge branch 'dm/maint-docco' into maint
* dm/maint-docco: Documentation: Remove spurious uses of "you" in git-bisect.txt. Documentation: minor grammatical fix in git-check-ref-format.txt Documentation: minor grammatical fixes in git-check-attr.txt Documentation: minor grammatical fixes in git-cat-file.txt Documentation: minor grammatical fixes and rewording in git-bundle.txt Documentation: remove some uses of the passive voice in git-bisect.txt Documentation: reword example text in git-bisect.txt. Documentation: reworded the "Description" section of git-bisect.txt. Documentation: minor grammatical fixes in git-branch.txt. Documentation: minor grammatical fixes in git-blame.txt. Documentation: reword the "Description" section of git-bisect.txt. Documentation: minor grammatical fixes in git-archive.txt.
This commit is contained in:
commit
66c9e7d487
@ -39,7 +39,7 @@ of lines before or after the line given by <start>.
|
|||||||
Show raw timestamp (Default: off).
|
Show raw timestamp (Default: off).
|
||||||
|
|
||||||
-S <revs-file>::
|
-S <revs-file>::
|
||||||
Use revs from revs-file instead of calling linkgit:git-rev-list[1].
|
Use revisions from revs-file instead of calling linkgit:git-rev-list[1].
|
||||||
|
|
||||||
--reverse::
|
--reverse::
|
||||||
Walk history forward instead of backward. Instead of showing
|
Walk history forward instead of backward. Instead of showing
|
||||||
|
@ -22,7 +22,7 @@ prepended to the filenames in the archive.
|
|||||||
|
|
||||||
'git-archive' behaves differently when given a tree ID versus when
|
'git-archive' behaves differently when given a tree ID versus when
|
||||||
given a commit ID or tag ID. In the first case the current time is
|
given a commit ID or tag ID. In the first case the current time is
|
||||||
used as modification time of each file in the archive. In the latter
|
used as the modification time of each file in the archive. In the latter
|
||||||
case the commit time as recorded in the referenced commit object is
|
case the commit time as recorded in the referenced commit object is
|
||||||
used instead. Additionally the commit ID is stored in a global
|
used instead. Additionally the commit ID is stored in a global
|
||||||
extended pax header if the tar format is used; it can be extracted
|
extended pax header if the tar format is used; it can be extracted
|
||||||
@ -48,11 +48,11 @@ OPTIONS
|
|||||||
Prepend <prefix>/ to each filename in the archive.
|
Prepend <prefix>/ to each filename in the archive.
|
||||||
|
|
||||||
<extra>::
|
<extra>::
|
||||||
This can be any options that the archiver backend understand.
|
This can be any options that the archiver backend understands.
|
||||||
See next section.
|
See next section.
|
||||||
|
|
||||||
--remote=<repo>::
|
--remote=<repo>::
|
||||||
Instead of making a tar archive from local repository,
|
Instead of making a tar archive from the local repository,
|
||||||
retrieve a tar archive from a remote repository.
|
retrieve a tar archive from a remote repository.
|
||||||
|
|
||||||
--exec=<git-upload-archive>::
|
--exec=<git-upload-archive>::
|
||||||
@ -105,7 +105,7 @@ EXAMPLES
|
|||||||
git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)::
|
git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)::
|
||||||
|
|
||||||
Create a tar archive that contains the contents of the
|
Create a tar archive that contains the contents of the
|
||||||
latest commit on the current branch, and extracts it in
|
latest commit on the current branch, and extract it in the
|
||||||
`/var/tmp/junk` directory.
|
`/var/tmp/junk` directory.
|
||||||
|
|
||||||
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz::
|
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz::
|
||||||
|
@ -3,7 +3,7 @@ git-bisect(1)
|
|||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
git-bisect - Find the change that introduced a bug by binary search
|
git-bisect - Find by binary search the change that introduced a bug
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
@ -39,7 +39,8 @@ help" or "git bisect -h" to get a long usage description.
|
|||||||
Basic bisect commands: start, bad, good
|
Basic bisect commands: start, bad, good
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The way you use it is:
|
Using the Linux kernel tree as an example, basic use of the bisect
|
||||||
|
command is as follows:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
$ git bisect start
|
$ git bisect start
|
||||||
@ -48,61 +49,63 @@ $ git bisect good v2.6.13-rc2 # v2.6.13-rc2 was the last version
|
|||||||
# tested that was good
|
# tested that was good
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
When you give at least one bad and one good versions, it will bisect
|
When you have specified at least one bad and one good version, the
|
||||||
the revision tree and say something like:
|
command bisects the revision tree and outputs something similar to
|
||||||
|
the following:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
Bisecting: 675 revisions left to test after this
|
Bisecting: 675 revisions left to test after this
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
and check out the state in the middle. Now, compile that kernel, and
|
The state in the middle of the set of revisions is then checked out.
|
||||||
boot it. Now, let's say that this booted kernel works fine, then just
|
You would now compile that kernel and boot it. If the booted kernel
|
||||||
do
|
works correctly, you would then issue the following command:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
$ git bisect good # this one is good
|
$ git bisect good # this one is good
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
which will now say
|
The output of this command would be something similar to the following:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
Bisecting: 337 revisions left to test after this
|
Bisecting: 337 revisions left to test after this
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
and you continue along, compiling that one, testing it, and depending
|
You keep repeating this process, compiling the tree, testing it, and
|
||||||
on whether it is good or bad, you say "git bisect good" or "git bisect
|
depending on whether it is good or bad issuing the command "git bisect good"
|
||||||
bad", and ask for the next bisection.
|
or "git bisect bad" to ask for the next bisection.
|
||||||
|
|
||||||
Until you have no more left, and you'll have been left with the first
|
Eventually there will be no more revisions left to bisect, and you
|
||||||
bad kernel rev in "refs/bisect/bad".
|
will have been left with the first bad kernel revision in "refs/bisect/bad".
|
||||||
|
|
||||||
Bisect reset
|
Bisect reset
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
Oh, and then after you want to reset to the original head, do a
|
To return to the original head after a bisect session, issue the
|
||||||
|
following command:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
$ git bisect reset
|
$ git bisect reset
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
to get back to the original branch, instead of being on the bisection
|
This resets the tree to the original branch instead of being on the
|
||||||
commit ("git bisect start" will do that for you too, actually: it will
|
bisection commit ("git bisect start" will also do that, as it resets
|
||||||
reset the bisection state).
|
the bisection state).
|
||||||
|
|
||||||
Bisect visualize
|
Bisect visualize
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
During the bisection process, you can say
|
To see the currently remaining suspects in 'gitk', issue the following
|
||||||
|
command during the bisection process:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect visualize
|
$ git bisect visualize
|
||||||
------------
|
------------
|
||||||
|
|
||||||
to see the currently remaining suspects in 'gitk'. `visualize` is a bit
|
`view` may also be used as a synonym for `visualize`.
|
||||||
too long to type and `view` is provided as a synonym.
|
|
||||||
|
|
||||||
If 'DISPLAY' environment variable is not set, 'git log' is used
|
If the 'DISPLAY' environment variable is not set, 'git log' is used
|
||||||
instead. You can even give command line options such as `-p` and
|
instead. You can also give command line options such as `-p` and
|
||||||
`--stat`.
|
`--stat`.
|
||||||
|
|
||||||
------------
|
------------
|
||||||
@ -112,57 +115,58 @@ $ git bisect view --stat
|
|||||||
Bisect log and bisect replay
|
Bisect log and bisect replay
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The good/bad input is logged, and
|
After having marked revisions as good or bad, issue the following
|
||||||
|
command to show what has been done so far:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect log
|
$ git bisect log
|
||||||
------------
|
------------
|
||||||
|
|
||||||
shows what you have done so far. You can truncate its output somewhere
|
If you discover that you made a mistake in specifying the status of a
|
||||||
and save it in a file, and run
|
revision, you can save the output of this command to a file, edit it to
|
||||||
|
remove the incorrect entries, and then issue the following commands to
|
||||||
|
return to a corrected state:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
|
$ git bisect reset
|
||||||
$ git bisect replay that-file
|
$ git bisect replay that-file
|
||||||
------------
|
------------
|
||||||
|
|
||||||
if you find later you made a mistake telling good/bad about a
|
Avoiding testing a commit
|
||||||
revision.
|
|
||||||
|
|
||||||
Avoiding to test a commit
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If in a middle of bisect session, you know what the bisect suggested
|
If, in the middle of a bisect session, you know that the next suggested
|
||||||
to try next is not a good one to test (e.g. the change the commit
|
revision is not a good one to test (e.g. the change the commit
|
||||||
introduces is known not to work in your environment and you know it
|
introduces is known not to work in your environment and you know it
|
||||||
does not have anything to do with the bug you are chasing), you may
|
does not have anything to do with the bug you are chasing), you may
|
||||||
want to find a near-by commit and try that instead.
|
want to find a nearby commit and try that instead.
|
||||||
|
|
||||||
It goes something like this:
|
For example:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect good/bad # previous round was good/bad.
|
$ git bisect good/bad # previous round was good or bad.
|
||||||
Bisecting: 337 revisions left to test after this
|
Bisecting: 337 revisions left to test after this
|
||||||
$ git bisect visualize # oops, that is uninteresting.
|
$ git bisect visualize # oops, that is uninteresting.
|
||||||
$ git reset --hard HEAD~3 # try 3 revs before what
|
$ git reset --hard HEAD~3 # try 3 revisions before what
|
||||||
# was suggested
|
# was suggested
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Then compile and test the one you chose to try. After that, tell
|
Then compile and test the chosen revision, and afterwards mark
|
||||||
bisect what the result was as usual.
|
the revision as good or bad in the usual manner.
|
||||||
|
|
||||||
Bisect skip
|
Bisect skip
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
Instead of choosing by yourself a nearby commit, you may just want git
|
Instead of choosing by yourself a nearby commit, you can ask git
|
||||||
to do it for you using:
|
to do it for you by issuing the command:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect skip # Current version cannot be tested
|
$ git bisect skip # Current version cannot be tested
|
||||||
------------
|
------------
|
||||||
|
|
||||||
But computing the commit to test may be slower afterwards and git may
|
But computing the commit to test may be slower afterwards and git may
|
||||||
eventually not be able to tell the first bad among a bad and one or
|
eventually not be able to tell the first bad commit among a bad commit
|
||||||
more "skip"ped commits.
|
and one or more skipped commits.
|
||||||
|
|
||||||
You can even skip a range of commits, instead of just one commit,
|
You can even skip a range of commits, instead of just one commit,
|
||||||
using the "'<commit1>'..'<commit2>'" notation. For example:
|
using the "'<commit1>'..'<commit2>'" notation. For example:
|
||||||
@ -171,33 +175,34 @@ using the "'<commit1>'..'<commit2>'" notation. For example:
|
|||||||
$ git bisect skip v2.5..v2.6
|
$ git bisect skip v2.5..v2.6
|
||||||
------------
|
------------
|
||||||
|
|
||||||
would mean that no commit between `v2.5` excluded and `v2.6` included
|
This tells the bisect process that no commit after `v2.5`, up to and
|
||||||
can be tested.
|
including `v2.6`, should be tested.
|
||||||
|
|
||||||
Note that if you want to also skip the first commit of a range you can
|
Note that if you also want to skip the first commit of the range you
|
||||||
use something like:
|
would issue the command:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect skip v2.5 v2.5..v2.6
|
$ git bisect skip v2.5 v2.5..v2.6
|
||||||
------------
|
------------
|
||||||
|
|
||||||
and the commit pointed to by `v2.5` will be skipped too.
|
This tells the bisect process that the commits between `v2.5` included
|
||||||
|
and `v2.6` included should be skipped.
|
||||||
|
|
||||||
|
|
||||||
Cutting down bisection by giving more parameters to bisect start
|
Cutting down bisection by giving more parameters to bisect start
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You can further cut down the number of trials if you know what part of
|
You can further cut down the number of trials, if you know what part of
|
||||||
the tree is involved in the problem you are tracking down, by giving
|
the tree is involved in the problem you are tracking down, by specifying
|
||||||
paths parameters when you say `bisect start`, like this:
|
path parameters when issuing the `bisect start` command:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect start -- arch/i386 include/asm-i386
|
$ git bisect start -- arch/i386 include/asm-i386
|
||||||
------------
|
------------
|
||||||
|
|
||||||
If you know beforehand more than one good commits, you can narrow the
|
If you know beforehand more than one good commit, you can narrow the
|
||||||
bisect space down without doing the whole tree checkout every time you
|
bisect space down by specifying all of the good commits immediately after
|
||||||
give good commits. You give the bad revision immediately after `start`
|
the bad commit when issuing the `bisect start` command:
|
||||||
and then you give all the good revisions you have:
|
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect start v2.6.20-rc6 v2.6.20-rc4 v2.6.20-rc1 --
|
$ git bisect start v2.6.20-rc6 v2.6.20-rc4 v2.6.20-rc1 --
|
||||||
@ -209,38 +214,38 @@ Bisect run
|
|||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
If you have a script that can tell if the current source code is good
|
If you have a script that can tell if the current source code is good
|
||||||
or bad, you can automatically bisect using:
|
or bad, you can bisect by issuing the command:
|
||||||
|
|
||||||
------------
|
------------
|
||||||
$ git bisect run my_script
|
$ git bisect run my_script
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Note that the "run" script (`my_script` in the above example) should
|
Note that the script (`my_script` in the above example) should
|
||||||
exit with code 0 in case the current source code is good. Exit with a
|
exit with code 0 if the current source code is good, and exit with a
|
||||||
code between 1 and 127 (inclusive), except 125, if the current
|
code between 1 and 127 (inclusive), except 125, if the current
|
||||||
source code is bad.
|
source code is bad.
|
||||||
|
|
||||||
Any other exit code will abort the automatic bisect process. (A
|
Any other exit code will abort the bisect process. It should be noted
|
||||||
program that does "exit(-1)" leaves $? = 255, see exit(3) manual page,
|
that a program that terminates via "exit(-1)" leaves $? = 255, (see the
|
||||||
the value is chopped with "& 0377".)
|
exit(3) manual page), as the value is chopped with "& 0377".
|
||||||
|
|
||||||
The special exit code 125 should be used when the current source code
|
The special exit code 125 should be used when the current source code
|
||||||
cannot be tested. If the "run" script exits with this code, the current
|
cannot be tested. If the script exits with this code, the current
|
||||||
revision will be skipped, see `git bisect skip` above.
|
revision will be skipped (see `git bisect skip` above).
|
||||||
|
|
||||||
You may often find that during bisect you want to have near-constant
|
You may often find that during a bisect session you want to have
|
||||||
tweaks (e.g., s/#define DEBUG 0/#define DEBUG 1/ in a header file, or
|
temporary modifications (e.g. s/#define DEBUG 0/#define DEBUG 1/ in a
|
||||||
"revision that does not have this commit needs this patch applied to
|
header file, or "revision that does not have this commit needs this
|
||||||
work around other problem this bisection is not interested in")
|
patch applied to work around another problem this bisection is not
|
||||||
applied to the revision being tested.
|
interested in") applied to the revision being tested.
|
||||||
|
|
||||||
To cope with such a situation, after the inner 'git bisect' finds the
|
To cope with such a situation, after the inner 'git bisect' finds the
|
||||||
next revision to test, with the "run" script, you can apply that tweak
|
next revision to test, the script can apply the patch
|
||||||
before compiling, run the real test, and after the test decides if the
|
before compiling, run the real test, and afterwards decide if the
|
||||||
revision (possibly with the needed tweaks) passed the test, rewind the
|
revision (possibly with the needed patch) passed the test and then
|
||||||
tree to the pristine state. Finally the "run" script can exit with
|
rewind the tree to the pristine state. Finally the script should exit
|
||||||
the status of the real test to let the "git bisect run" command loop to
|
with the status of the real test to let the "git bisect run" command loop
|
||||||
determine the outcome.
|
determine the eventual outcome of the bisect session.
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
@ -257,39 +262,39 @@ $ git bisect run make # "make" builds the app
|
|||||||
------------
|
------------
|
||||||
$ cat ~/test.sh
|
$ cat ~/test.sh
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
make || exit 125 # this "skip"s broken builds
|
make || exit 125 # this skips broken builds
|
||||||
make test # "make test" runs the test suite
|
make test # "make test" runs the test suite
|
||||||
$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good
|
$ git bisect start v1.3 v1.1 -- # v1.3 is bad, v1.1 is good
|
||||||
$ git bisect run ~/test.sh
|
$ git bisect run ~/test.sh
|
||||||
------------
|
------------
|
||||||
+
|
+
|
||||||
Here we use a "test.sh" custom script. In this script, if "make"
|
Here we use a "test.sh" custom script. In this script, if "make"
|
||||||
fails, we "skip" the current commit.
|
fails, we skip the current commit.
|
||||||
+
|
+
|
||||||
It's safer to use a custom script outside the repo to prevent
|
It is safer to use a custom script outside the repository to prevent
|
||||||
interactions between the bisect, make and test processes and the
|
interactions between the bisect, make and test processes and the
|
||||||
script.
|
script.
|
||||||
+
|
+
|
||||||
And "make test" should "exit 0", if the test suite passes, and
|
"make test" should "exit 0", if the test suite passes, and
|
||||||
"exit 1" (for example) otherwise.
|
"exit 1" otherwise.
|
||||||
|
|
||||||
* Automatically bisect a broken test case:
|
* Automatically bisect a broken test case:
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
$ cat ~/test.sh
|
$ cat ~/test.sh
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
make || exit 125 # this "skip"s broken builds
|
make || exit 125 # this skips broken builds
|
||||||
~/check_test_case.sh # does the test case passes ?
|
~/check_test_case.sh # does the test case passes ?
|
||||||
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
$ git bisect start HEAD HEAD~10 -- # culprit is among the last 10
|
||||||
$ git bisect run ~/test.sh
|
$ git bisect run ~/test.sh
|
||||||
------------
|
------------
|
||||||
+
|
+
|
||||||
Here "check_test_case.sh" should "exit 0", if the test case passes,
|
Here "check_test_case.sh" should "exit 0" if the test case passes,
|
||||||
and "exit 1" (for example) otherwise.
|
and "exit 1" otherwise.
|
||||||
+
|
+
|
||||||
It's safer if both "test.sh" and "check_test_case.sh" scripts are
|
It is safer if both "test.sh" and "check_test_case.sh" scripts are
|
||||||
outside the repo to prevent interactions between the bisect, make and
|
outside the repository to prevent interactions between the bisect,
|
||||||
test processes and the scripts.
|
make and test processes and the scripts.
|
||||||
|
|
||||||
Author
|
Author
|
||||||
------
|
------
|
||||||
|
@ -18,9 +18,9 @@ DESCRIPTION
|
|||||||
Annotates each line in the given file with information from the revision which
|
Annotates each line in the given file with information from the revision which
|
||||||
last modified the line. Optionally, start annotating from the given revision.
|
last modified the line. Optionally, start annotating from the given revision.
|
||||||
|
|
||||||
Also it can limit the range of lines annotated.
|
The command can also limit the range of lines annotated.
|
||||||
|
|
||||||
This report doesn't tell you anything about lines which have been deleted or
|
The report does not tell you anything about lines which have been deleted or
|
||||||
replaced; you need to use a tool such as 'git-diff' or the "pickaxe"
|
replaced; you need to use a tool such as 'git-diff' or the "pickaxe"
|
||||||
interface briefly mentioned in the following paragraph.
|
interface briefly mentioned in the following paragraph.
|
||||||
|
|
||||||
@ -48,26 +48,26 @@ include::blame-options.txt[]
|
|||||||
lines between files (see `-C`) and lines moved within a
|
lines between files (see `-C`) and lines moved within a
|
||||||
file (see `-M`). The first number listed is the score.
|
file (see `-M`). The first number listed is the score.
|
||||||
This is the number of alphanumeric characters detected
|
This is the number of alphanumeric characters detected
|
||||||
to be moved between or within files. This must be above
|
as having been moved between or within files. This must be above
|
||||||
a certain threshold for 'git-blame' to consider those lines
|
a certain threshold for 'git-blame' to consider those lines
|
||||||
of code to have been moved.
|
of code to have been moved.
|
||||||
|
|
||||||
-f::
|
-f::
|
||||||
--show-name::
|
--show-name::
|
||||||
Show filename in the original commit. By default
|
Show the filename in the original commit. By default
|
||||||
filename is shown if there is any line that came from a
|
the filename is shown if there is any line that came from a
|
||||||
file with different name, due to rename detection.
|
file with a different name, due to rename detection.
|
||||||
|
|
||||||
-n::
|
-n::
|
||||||
--show-number::
|
--show-number::
|
||||||
Show line number in the original commit (Default: off).
|
Show the line number in the original commit (Default: off).
|
||||||
|
|
||||||
-s::
|
-s::
|
||||||
Suppress author name and timestamp from the output.
|
Suppress the author name and timestamp from the output.
|
||||||
|
|
||||||
-w::
|
-w::
|
||||||
Ignore whitespace when comparing parent's version and
|
Ignore whitespace when comparing the parent's version and
|
||||||
child's to find where the lines came from.
|
the child's to find where the lines came from.
|
||||||
|
|
||||||
|
|
||||||
THE PORCELAIN FORMAT
|
THE PORCELAIN FORMAT
|
||||||
@ -79,17 +79,17 @@ header at the minimum has the first line which has:
|
|||||||
- 40-byte SHA-1 of the commit the line is attributed to;
|
- 40-byte SHA-1 of the commit the line is attributed to;
|
||||||
- the line number of the line in the original file;
|
- the line number of the line in the original file;
|
||||||
- the line number of the line in the final file;
|
- the line number of the line in the final file;
|
||||||
- on a line that starts a group of line from a different
|
- on a line that starts a group of lines from a different
|
||||||
commit than the previous one, the number of lines in this
|
commit than the previous one, the number of lines in this
|
||||||
group. On subsequent lines this field is absent.
|
group. On subsequent lines this field is absent.
|
||||||
|
|
||||||
This header line is followed by the following information
|
This header line is followed by the following information
|
||||||
at least once for each commit:
|
at least once for each commit:
|
||||||
|
|
||||||
- author name ("author"), email ("author-mail"), time
|
- the author name ("author"), email ("author-mail"), time
|
||||||
("author-time"), and timezone ("author-tz"); similarly
|
("author-time"), and timezone ("author-tz"); similarly
|
||||||
for committer.
|
for committer.
|
||||||
- filename in the commit the line is attributed to.
|
- the filename in the commit that the line is attributed to.
|
||||||
- the first line of the commit log message ("summary").
|
- the first line of the commit log message ("summary").
|
||||||
|
|
||||||
The contents of the actual line is output after the above
|
The contents of the actual line is output after the above
|
||||||
@ -100,23 +100,23 @@ header elements later.
|
|||||||
SPECIFYING RANGES
|
SPECIFYING RANGES
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Unlike 'git-blame' and 'git-annotate' in older git, the extent
|
Unlike 'git-blame' and 'git-annotate' in older versions of git, the extent
|
||||||
of annotation can be limited to both line ranges and revision
|
of the annotation can be limited to both line ranges and revision
|
||||||
ranges. When you are interested in finding the origin for
|
ranges. When you are interested in finding the origin for
|
||||||
ll. 40-60 for file `foo`, you can use `-L` option like these
|
lines 40-60 for file `foo`, you can use the `-L` option like so
|
||||||
(they mean the same thing -- both ask for 21 lines starting at
|
(they mean the same thing -- both ask for 21 lines starting at
|
||||||
line 40):
|
line 40):
|
||||||
|
|
||||||
git blame -L 40,60 foo
|
git blame -L 40,60 foo
|
||||||
git blame -L 40,+21 foo
|
git blame -L 40,+21 foo
|
||||||
|
|
||||||
Also you can use regular expression to specify the line range.
|
Also you can use a regular expression to specify the line range:
|
||||||
|
|
||||||
git blame -L '/^sub hello {/,/^}$/' foo
|
git blame -L '/^sub hello {/,/^}$/' foo
|
||||||
|
|
||||||
would limit the annotation to the body of `hello` subroutine.
|
which limits the annotation to the body of the `hello` subroutine.
|
||||||
|
|
||||||
When you are not interested in changes older than the version
|
When you are not interested in changes older than version
|
||||||
v2.6.18, or changes older than 3 weeks, you can use revision
|
v2.6.18, or changes older than 3 weeks, you can use revision
|
||||||
range specifiers similar to 'git-rev-list':
|
range specifiers similar to 'git-rev-list':
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ commit v2.6.18 or the most recent commit that is more than 3
|
|||||||
weeks old in the above example) are blamed for that range
|
weeks old in the above example) are blamed for that range
|
||||||
boundary commit.
|
boundary commit.
|
||||||
|
|
||||||
A particularly useful way is to see if an added file have lines
|
A particularly useful way is to see if an added file has lines
|
||||||
created by copy-and-paste from existing files. Sometimes this
|
created by copy-and-paste from existing files. Sometimes this
|
||||||
indicates that the developer was being sloppy and did not
|
indicates that the developer was being sloppy and did not
|
||||||
refactor the code properly. You can first find the commit that
|
refactor the code properly. You can first find the commit that
|
||||||
@ -162,26 +162,26 @@ annotated.
|
|||||||
+
|
+
|
||||||
Line numbers count from 1.
|
Line numbers count from 1.
|
||||||
|
|
||||||
. The first time that commit shows up in the stream, it has various
|
. The first time that a commit shows up in the stream, it has various
|
||||||
other information about it printed out with a one-word tag at the
|
other information about it printed out with a one-word tag at the
|
||||||
beginning of each line about that "extended commit info" (author,
|
beginning of each line describing the extra commit information (author,
|
||||||
email, committer, dates, summary etc).
|
email, committer, dates, summary, etc.).
|
||||||
|
|
||||||
. Unlike Porcelain format, the filename information is always
|
. Unlike the Porcelain format, the filename information is always
|
||||||
given and terminates the entry:
|
given and terminates the entry:
|
||||||
|
|
||||||
"filename" <whitespace-quoted-filename-goes-here>
|
"filename" <whitespace-quoted-filename-goes-here>
|
||||||
+
|
+
|
||||||
and thus it's really quite easy to parse for some line- and word-oriented
|
and thus it is really quite easy to parse for some line- and word-oriented
|
||||||
parser (which should be quite natural for most scripting languages).
|
parser (which should be quite natural for most scripting languages).
|
||||||
+
|
+
|
||||||
[NOTE]
|
[NOTE]
|
||||||
For people who do parsing: to make it more robust, just ignore any
|
For people who do parsing: to make it more robust, just ignore any
|
||||||
lines in between the first and last one ("<sha1>" and "filename" lines)
|
lines between the first and last one ("<sha1>" and "filename" lines)
|
||||||
where you don't recognize the tag-words (or care about that particular
|
where you do not recognize the tag words (or care about that particular
|
||||||
one) at the beginning of the "extended information" lines. That way, if
|
one) at the beginning of the "extended information" lines. That way, if
|
||||||
there is ever added information (like the commit encoding or extended
|
there is ever added information (like the commit encoding or extended
|
||||||
commit commentary), a blame viewer won't ever care.
|
commit commentary), a blame viewer will not care.
|
||||||
|
|
||||||
|
|
||||||
MAPPING AUTHORS
|
MAPPING AUTHORS
|
||||||
|
@ -18,19 +18,19 @@ SYNOPSIS
|
|||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
With no arguments, existing branches are listed, the current branch will
|
With no arguments, existing branches are listed and the current branch will
|
||||||
be highlighted with an asterisk. Option `-r` causes the remote-tracking
|
be highlighted with an asterisk. Option `-r` causes the remote-tracking
|
||||||
branches to be listed, and option `-a` shows both.
|
branches to be listed, and option `-a` shows both.
|
||||||
|
|
||||||
With `--contains`, shows only the branches that contains the named commit
|
With `--contains`, shows only the branches that contain the named commit
|
||||||
(in other words, the branches whose tip commits are descendant of the
|
(in other words, the branches whose tip commits are descendants of the
|
||||||
named commit). With `--merged`, only branches merged into the named
|
named commit). With `--merged`, only branches merged into the named
|
||||||
commit (i.e. the branches whose tip commits are reachable from the named
|
commit (i.e. the branches whose tip commits are reachable from the named
|
||||||
commit) will be listed. With `--no-merged` only branches not merged into
|
commit) will be listed. With `--no-merged` only branches not merged into
|
||||||
the named commit will be listed. Missing <commit> argument defaults to
|
the named commit will be listed. If the <commit> argument is missing it
|
||||||
'HEAD' (i.e. the tip of the current branch).
|
defaults to 'HEAD' (i.e. the tip of the current branch).
|
||||||
|
|
||||||
In its second form, a new branch named <branchname> will be created.
|
In the command's second form, a new branch named <branchname> will be created.
|
||||||
It will start out with a head equal to the one given as <start-point>.
|
It will start out with a head equal to the one given as <start-point>.
|
||||||
If no <start-point> is given, the branch will be created with a head
|
If no <start-point> is given, the branch will be created with a head
|
||||||
equal to that of the currently checked out branch.
|
equal to that of the currently checked out branch.
|
||||||
@ -57,9 +57,9 @@ has a reflog then the reflog will also be deleted.
|
|||||||
|
|
||||||
Use -r together with -d to delete remote-tracking branches. Note, that it
|
Use -r together with -d to delete remote-tracking branches. Note, that it
|
||||||
only makes sense to delete remote-tracking branches if they no longer exist
|
only makes sense to delete remote-tracking branches if they no longer exist
|
||||||
in remote repository or if 'git-fetch' was configured not to fetch
|
in the remote repository or if 'git-fetch' was configured not to fetch
|
||||||
them again. See also 'prune' subcommand of linkgit:git-remote[1] for way to
|
them again. See also the 'prune' subcommand of linkgit:git-remote[1] for a
|
||||||
clean up all obsolete remote-tracking branches.
|
way to clean up all obsolete remote-tracking branches.
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
@ -83,7 +83,7 @@ OPTIONS
|
|||||||
Move/rename a branch and the corresponding reflog.
|
Move/rename a branch and the corresponding reflog.
|
||||||
|
|
||||||
-M::
|
-M::
|
||||||
Move/rename a branch even if the new branchname already exists.
|
Move/rename a branch even if the new branch name already exists.
|
||||||
|
|
||||||
--color::
|
--color::
|
||||||
Color branches to highlight current, local, and remote branches.
|
Color branches to highlight current, local, and remote branches.
|
||||||
@ -103,17 +103,17 @@ OPTIONS
|
|||||||
Show sha1 and commit subject line for each head.
|
Show sha1 and commit subject line for each head.
|
||||||
|
|
||||||
--abbrev=<length>::
|
--abbrev=<length>::
|
||||||
Alter minimum display length for sha1 in output listing,
|
Alter the sha1's minimum display length in the output listing.
|
||||||
default value is 7.
|
The default value is 7.
|
||||||
|
|
||||||
--no-abbrev::
|
--no-abbrev::
|
||||||
Display the full sha1s in output listing rather than abbreviating them.
|
Display the full sha1s in the output listing rather than abbreviating them.
|
||||||
|
|
||||||
--track::
|
--track::
|
||||||
When creating a new branch, set up configuration so that 'git-pull'
|
When creating a new branch, set up the configuration so that 'git-pull'
|
||||||
will automatically retrieve data from the start point, which must be
|
will automatically retrieve data from the start point, which must be
|
||||||
a branch. Use this if you always pull from the same upstream branch
|
a branch. Use this if you always pull from the same upstream branch
|
||||||
into the new branch, and if you don't want to use "git pull
|
into the new branch, and if you do not want to use "git pull
|
||||||
<repository> <refspec>" explicitly. This behavior is the default
|
<repository> <refspec>" explicitly. This behavior is the default
|
||||||
when the start point is a remote branch. Set the
|
when the start point is a remote branch. Set the
|
||||||
branch.autosetupmerge configuration variable to `false` if you want
|
branch.autosetupmerge configuration variable to `false` if you want
|
||||||
@ -149,13 +149,13 @@ OPTIONS
|
|||||||
|
|
||||||
<newbranch>::
|
<newbranch>::
|
||||||
The new name for an existing branch. The same restrictions as for
|
The new name for an existing branch. The same restrictions as for
|
||||||
<branchname> applies.
|
<branchname> apply.
|
||||||
|
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Start development off of a known tag::
|
Start development from a known tag::
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
|
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
|
||||||
@ -167,7 +167,7 @@ $ git checkout my2.6.14
|
|||||||
<1> This step and the next one could be combined into a single step with
|
<1> This step and the next one could be combined into a single step with
|
||||||
"checkout -b my2.6.14 v2.6.14".
|
"checkout -b my2.6.14 v2.6.14".
|
||||||
|
|
||||||
Delete unneeded branch::
|
Delete an unneeded branch::
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
$ git clone git://git.kernel.org/.../git.git my.git
|
$ git clone git://git.kernel.org/.../git.git my.git
|
||||||
@ -176,21 +176,21 @@ $ git branch -d -r origin/todo origin/html origin/man <1>
|
|||||||
$ git branch -D test <2>
|
$ git branch -D test <2>
|
||||||
------------
|
------------
|
||||||
+
|
+
|
||||||
<1> Delete remote-tracking branches "todo", "html", "man". Next 'fetch' or
|
<1> Delete the remote-tracking branches "todo", "html" and "man". The next
|
||||||
'pull' will create them again unless you configure them not to. See
|
'fetch' or 'pull' will create them again unless you configure them not to.
|
||||||
linkgit:git-fetch[1].
|
See linkgit:git-fetch[1].
|
||||||
<2> Delete "test" branch even if the "master" branch (or whichever branch is
|
<2> Delete the "test" branch even if the "master" branch (or whichever branch
|
||||||
currently checked out) does not have all commits from test branch.
|
is currently checked out) does not have all commits from the test branch.
|
||||||
|
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
If you are creating a branch that you want to immediately checkout, it's
|
If you are creating a branch that you want to checkout immediately, it is
|
||||||
easier to use the git checkout command with its `-b` option to create
|
easier to use the git checkout command with its `-b` option to create
|
||||||
a branch and check it out with a single command.
|
a branch and check it out with a single command.
|
||||||
|
|
||||||
The options `--contains`, `--merged` and `--no-merged` serves three related
|
The options `--contains`, `--merged` and `--no-merged` serve three related
|
||||||
but different purposes:
|
but different purposes:
|
||||||
|
|
||||||
- `--contains <commit>` is used to find all branches which will need
|
- `--contains <commit>` is used to find all branches which will need
|
||||||
|
@ -19,13 +19,13 @@ DESCRIPTION
|
|||||||
|
|
||||||
Some workflows require that one or more branches of development on one
|
Some workflows require that one or more branches of development on one
|
||||||
machine be replicated on another machine, but the two machines cannot
|
machine be replicated on another machine, but the two machines cannot
|
||||||
be directly connected so the interactive git protocols (git, ssh,
|
be directly connected, and therefore the interactive git protocols (git,
|
||||||
rsync, http) cannot be used. This command provides support for
|
ssh, rsync, http) cannot be used. This command provides support for
|
||||||
'git-fetch' and 'git-pull' to operate by packaging objects and references
|
'git-fetch' and 'git-pull' to operate by packaging objects and references
|
||||||
in an archive at the originating machine, then importing those into
|
in an archive at the originating machine, then importing those into
|
||||||
another repository using 'git-fetch' and 'git-pull'
|
another repository using 'git-fetch' and 'git-pull'
|
||||||
after moving the archive by some means (i.e., by sneakernet). As no
|
after moving the archive by some means (i.e., by sneakernet). As no
|
||||||
direct connection between repositories exists, the user must specify a
|
direct connection between the repositories exists, the user must specify a
|
||||||
basis for the bundle that is held by the destination repository: the
|
basis for the bundle that is held by the destination repository: the
|
||||||
bundle assumes that all objects in the basis are already in the
|
bundle assumes that all objects in the basis are already in the
|
||||||
destination repository.
|
destination repository.
|
||||||
@ -43,7 +43,7 @@ verify <file>::
|
|||||||
bundle format itself as well as checking that the prerequisite
|
bundle format itself as well as checking that the prerequisite
|
||||||
commits exist and are fully linked in the current repository.
|
commits exist and are fully linked in the current repository.
|
||||||
'git-bundle' prints a list of missing commits, if any, and exits
|
'git-bundle' prints a list of missing commits, if any, and exits
|
||||||
with non-zero status.
|
with a non-zero status.
|
||||||
|
|
||||||
list-heads <file>::
|
list-heads <file>::
|
||||||
Lists the references defined in the bundle. If followed by a
|
Lists the references defined in the bundle. If followed by a
|
||||||
@ -53,14 +53,14 @@ list-heads <file>::
|
|||||||
unbundle <file>::
|
unbundle <file>::
|
||||||
Passes the objects in the bundle to 'git-index-pack'
|
Passes the objects in the bundle to 'git-index-pack'
|
||||||
for storage in the repository, then prints the names of all
|
for storage in the repository, then prints the names of all
|
||||||
defined references. If a reflist is given, only references
|
defined references. If a list of references is given, only
|
||||||
matching those in the given list are printed. This command is
|
references matching those in the list are printed. This command is
|
||||||
really plumbing, intended to be called only by 'git-fetch'.
|
really plumbing, intended to be called only by 'git-fetch'.
|
||||||
|
|
||||||
[git-rev-list-args...]::
|
[git-rev-list-args...]::
|
||||||
A list of arguments, acceptable to 'git-rev-parse' and
|
A list of arguments, acceptable to 'git-rev-parse' and
|
||||||
'git-rev-list', that specify the specific objects and references
|
'git-rev-list', that specifies the specific objects and references
|
||||||
to transport. For example, "master~10..master" causes the
|
to transport. For example, `master\~10..master` causes the
|
||||||
current master reference to be packaged along with all objects
|
current master reference to be packaged along with all objects
|
||||||
added since its 10th ancestor commit. There is no explicit
|
added since its 10th ancestor commit. There is no explicit
|
||||||
limit to the number of references and objects that may be
|
limit to the number of references and objects that may be
|
||||||
@ -71,24 +71,24 @@ unbundle <file>::
|
|||||||
A list of references used to limit the references reported as
|
A list of references used to limit the references reported as
|
||||||
available. This is principally of use to 'git-fetch', which
|
available. This is principally of use to 'git-fetch', which
|
||||||
expects to receive only those references asked for and not
|
expects to receive only those references asked for and not
|
||||||
necessarily everything in the pack (in this case, 'git-bundle' is
|
necessarily everything in the pack (in this case, 'git-bundle' acts
|
||||||
acting like 'git-fetch-pack').
|
like 'git-fetch-pack').
|
||||||
|
|
||||||
SPECIFYING REFERENCES
|
SPECIFYING REFERENCES
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
'git-bundle' will only package references that are shown by
|
'git-bundle' will only package references that are shown by
|
||||||
'git-show-ref': this includes heads, tags, and remote heads. References
|
'git-show-ref': this includes heads, tags, and remote heads. References
|
||||||
such as master~1 cannot be packaged, but are perfectly suitable for
|
such as `master\~1` cannot be packaged, but are perfectly suitable for
|
||||||
defining the basis. More than one reference may be packaged, and more
|
defining the basis. More than one reference may be packaged, and more
|
||||||
than one basis can be specified. The objects packaged are those not
|
than one basis can be specified. The objects packaged are those not
|
||||||
contained in the union of the given bases. Each basis can be
|
contained in the union of the given bases. Each basis can be
|
||||||
specified explicitly (e.g., ^master~10), or implicitly (e.g.,
|
specified explicitly (e.g. `^master\~10`), or implicitly (e.g.
|
||||||
master~10..master, --since=10.days.ago master).
|
`master\~10..master`, `--since=10.days.ago master`).
|
||||||
|
|
||||||
It is very important that the basis used be held by the destination.
|
It is very important that the basis used be held by the destination.
|
||||||
It is okay to err on the side of conservatism, causing the bundle file
|
It is okay to err on the side of caution, causing the bundle file
|
||||||
to contain objects already in the destination as these are ignored
|
to contain objects already in the destination, as these are ignored
|
||||||
when unpacking at the destination.
|
when unpacking at the destination.
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
@ -97,13 +97,13 @@ EXAMPLE
|
|||||||
Assume you want to transfer the history from a repository R1 on machine A
|
Assume you want to transfer the history from a repository R1 on machine A
|
||||||
to another repository R2 on machine B.
|
to another repository R2 on machine B.
|
||||||
For whatever reason, direct connection between A and B is not allowed,
|
For whatever reason, direct connection between A and B is not allowed,
|
||||||
but we can move data from A to B via some mechanism (CD, email, etc).
|
but we can move data from A to B via some mechanism (CD, email, etc.).
|
||||||
We want to update R2 with developments made on branch master in R1.
|
We want to update R2 with development made on the branch master in R1.
|
||||||
|
|
||||||
To bootstrap the process, you can first create a bundle that doesn't have
|
To bootstrap the process, you can first create a bundle that does not have
|
||||||
any basis. You can use a tag to remember up to what commit you sent out
|
any basis. You can use a tag to remember up to what commit you last
|
||||||
in order to make it easy to later update the other repository with
|
processed, in order to make it easy to later update the other repository
|
||||||
incremental bundle,
|
with an incremental bundle:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
machineA$ cd R1
|
machineA$ cd R1
|
||||||
@ -111,17 +111,17 @@ machineA$ git bundle create file.bundle master
|
|||||||
machineA$ git tag -f lastR2bundle master
|
machineA$ git tag -f lastR2bundle master
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Then you sneakernet file.bundle to the target machine B. Because you don't
|
Then you transfer file.bundle to the target machine B. If you are creating
|
||||||
have to have any object to extract objects from such a bundle, not only
|
the repository on machine B, then you can clone from the bundle as if it
|
||||||
you can fetch/pull from a bundle, you can clone from it as if it was a
|
were a remote repository instead of creating an empty repository and then
|
||||||
remote repository.
|
pulling or fetching objects from the bundle:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
machineB$ git clone /home/me/tmp/file.bundle R2
|
machineB$ git clone /home/me/tmp/file.bundle R2
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
This will define a remote called "origin" in the resulting repository that
|
This will define a remote called "origin" in the resulting repository that
|
||||||
lets you fetch and pull from the bundle. $GIT_DIR/config file in R2 may
|
lets you fetch and pull from the bundle. The $GIT_DIR/config file in R2 will
|
||||||
have an entry like this:
|
have an entry like this:
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
@ -130,12 +130,12 @@ have an entry like this:
|
|||||||
fetch = refs/heads/*:refs/remotes/origin/*
|
fetch = refs/heads/*:refs/remotes/origin/*
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
You can fetch/pull to update the resulting mine.git repository after
|
To update the resulting mine.git repository, you can fetch or pull after
|
||||||
replacing the bundle you store at /home/me/tmp/file.bundle with incremental
|
replacing the bundle stored at /home/me/tmp/file.bundle with incremental
|
||||||
updates from here on.
|
updates.
|
||||||
|
|
||||||
After working more in the original repository, you can create an
|
After working some more in the original repository, you can create an
|
||||||
incremental bundle to update the other:
|
incremental bundle to update the other repository:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
machineA$ cd R1
|
machineA$ cd R1
|
||||||
@ -143,8 +143,8 @@ machineA$ git bundle create file.bundle lastR2bundle..master
|
|||||||
machineA$ git tag -f lastR2bundle master
|
machineA$ git tag -f lastR2bundle master
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
and sneakernet it to the other machine to replace /home/me/tmp/file.bundle,
|
You then transfer the bundle to the other machine to replace
|
||||||
and pull from it.
|
/home/me/tmp/file.bundle, and pull from it.
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
machineB$ cd R2
|
machineB$ cd R2
|
||||||
@ -152,49 +152,49 @@ machineB$ git pull
|
|||||||
----------------
|
----------------
|
||||||
|
|
||||||
If you know up to what commit the intended recipient repository should
|
If you know up to what commit the intended recipient repository should
|
||||||
have the necessary objects for, you can use that knowledge to specify the
|
have the necessary objects, you can use that knowledge to specify the
|
||||||
basis, giving a cut-off point to limit the revisions and objects that go
|
basis, giving a cut-off point to limit the revisions and objects that go
|
||||||
in the resulting bundle. The previous example used lastR2bundle tag
|
in the resulting bundle. The previous example used lastR2bundle tag
|
||||||
for this purpose, but you can use other options you would give to
|
for this purpose, but you can use any other options that you would give to
|
||||||
the linkgit:git-log[1] command. Here are more examples:
|
the linkgit:git-log[1] command. Here are more examples:
|
||||||
|
|
||||||
You can use a tag that is present in both.
|
You can use a tag that is present in both:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git bundle create mybundle v1.0.0..master
|
$ git bundle create mybundle v1.0.0..master
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
You can use a basis based on time.
|
You can use a basis based on time:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git bundle create mybundle --since=10.days master
|
$ git bundle create mybundle --since=10.days master
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Or you can use the number of commits.
|
You can use the number of commits:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git bundle create mybundle -10 master
|
$ git bundle create mybundle -10 master
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
You can run `git-bundle verify` to see if you can extract from a bundle
|
You can run `git-bundle verify` to see if you can extract from a bundle
|
||||||
that was created with a basis.
|
that was created with a basis:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git bundle verify mybundle
|
$ git bundle verify mybundle
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
This will list what commits you must have in order to extract from the
|
This will list what commits you must have in order to extract from the
|
||||||
bundle and will error out if you don't have them.
|
bundle and will error out if you do not have them.
|
||||||
|
|
||||||
A bundle from a recipient repository's point of view is just like a
|
A bundle from a recipient repository's point of view is just like a
|
||||||
regular repository it fetches/pulls from. You can for example map
|
regular repository which it fetches or pulls from. You can, for example, map
|
||||||
refs, like this example, when fetching:
|
references when fetching:
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git fetch mybundle master:localRef
|
$ git fetch mybundle master:localRef
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Or see what refs it offers.
|
You can also see what references it offers.
|
||||||
|
|
||||||
----------------
|
----------------
|
||||||
$ git ls-remote mybundle
|
$ git ls-remote mybundle
|
||||||
|
@ -3,7 +3,7 @@ git-cat-file(1)
|
|||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
git-cat-file - Provide content or type/size information for repository objects
|
git-cat-file - Provide content or type and size information for repository objects
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
@ -14,19 +14,19 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
In the first form, provides content or type of objects in the repository. The
|
In its first form, the command provides the content or the type of an object in
|
||||||
type is required unless '-t' or '-p' is used to find the object type, or '-s'
|
the repository. The type is required unless '-t' or '-p' is used to find the
|
||||||
is used to find the object size.
|
object type, or '-s' is used to find the object size.
|
||||||
|
|
||||||
In the second form, a list of object (separated by LFs) is provided on stdin,
|
In the second form, a list of objects (separated by linefeeds) is provided on
|
||||||
and the SHA1, type, and size of each object is printed on stdout.
|
stdin, and the SHA1, type, and size of each object is printed on stdout.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
<object>::
|
<object>::
|
||||||
The name of the object to show.
|
The name of the object to show.
|
||||||
For a more complete list of ways to spell object names, see
|
For a more complete list of ways to spell object names, see
|
||||||
"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
|
the "SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
|
||||||
|
|
||||||
-t::
|
-t::
|
||||||
Instead of the content, show the object type identified by
|
Instead of the content, show the object type identified by
|
||||||
@ -56,8 +56,8 @@ OPTIONS
|
|||||||
stdin. May not be combined with any other options or arguments.
|
stdin. May not be combined with any other options or arguments.
|
||||||
|
|
||||||
--batch-check::
|
--batch-check::
|
||||||
Print the SHA1, type, and size of each object provided on stdin. May not be
|
Print the SHA1, type, and size of each object provided on stdin. May not
|
||||||
combined with any other options or arguments.
|
be combined with any other options or arguments.
|
||||||
|
|
||||||
OUTPUT
|
OUTPUT
|
||||||
------
|
------
|
||||||
|
@ -14,7 +14,7 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
For every pathname, this command will list if each attr is 'unspecified',
|
For every pathname, this command will list if each attribute is 'unspecified',
|
||||||
'set', or 'unset' as a gitattribute on that pathname.
|
'set', or 'unset' as a gitattribute on that pathname.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
@ -23,11 +23,11 @@ OPTIONS
|
|||||||
Read file names from stdin instead of from the command-line.
|
Read file names from stdin instead of from the command-line.
|
||||||
|
|
||||||
-z::
|
-z::
|
||||||
Only meaningful with `--stdin`; paths are separated with
|
Only meaningful with `--stdin`; paths are separated with a
|
||||||
NUL character instead of LF.
|
NUL character instead of a linefeed character.
|
||||||
|
|
||||||
\--::
|
\--::
|
||||||
Interpret all preceding arguments as attributes, and all following
|
Interpret all preceding arguments as attributes and all following
|
||||||
arguments as path names. If not supplied, only the first argument will
|
arguments as path names. If not supplied, only the first argument will
|
||||||
be treated as an attribute.
|
be treated as an attribute.
|
||||||
|
|
||||||
@ -37,12 +37,12 @@ OUTPUT
|
|||||||
The output is of the form:
|
The output is of the form:
|
||||||
<path> COLON SP <attribute> COLON SP <info> LF
|
<path> COLON SP <attribute> COLON SP <info> LF
|
||||||
|
|
||||||
Where <path> is the path of a file being queried, <attribute> is an attribute
|
<path> is the path of a file being queried, <attribute> is an attribute
|
||||||
being queried and <info> can be either:
|
being queried and <info> can be either:
|
||||||
|
|
||||||
'unspecified';; when the attribute is not defined for the path.
|
'unspecified';; when the attribute is not defined for the path.
|
||||||
'unset';; when the attribute is defined to false.
|
'unset';; when the attribute is defined as false.
|
||||||
'set';; when the attribute is defined to true.
|
'set';; when the attribute is defined as true.
|
||||||
<value>;; when a value has been assigned to the attribute.
|
<value>;; when a value has been assigned to the attribute.
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
@ -69,7 +69,7 @@ org/example/MyClass.java: diff: java
|
|||||||
org/example/MyClass.java: myAttr: set
|
org/example/MyClass.java: myAttr: set
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
* Listing attribute for multiple files:
|
* Listing an attribute for multiple files:
|
||||||
---------------
|
---------------
|
||||||
$ git check-attr myAttr -- org/example/MyClass.java org/example/NoMyAttr.java
|
$ git check-attr myAttr -- org/example/MyClass.java org/example/NoMyAttr.java
|
||||||
org/example/MyClass.java: myAttr: set
|
org/example/MyClass.java: myAttr: set
|
||||||
|
@ -3,7 +3,7 @@ git-check-ref-format(1)
|
|||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
git-check-ref-format - Make sure ref name is well formed
|
git-check-ref-format - Ensures that a reference name is well formed
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
@ -11,40 +11,40 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
Checks if a given 'refname' is acceptable, and exits non-zero if
|
Checks if a given 'refname' is acceptable, and exits with a non-zero
|
||||||
it is not.
|
status if it is not.
|
||||||
|
|
||||||
A reference is used in git to specify branches and tags. A
|
A reference is used in git to specify branches and tags. A
|
||||||
branch head is stored under `$GIT_DIR/refs/heads` directory, and
|
branch head is stored under the `$GIT_DIR/refs/heads` directory, and
|
||||||
a tag is stored under `$GIT_DIR/refs/tags` directory. git
|
a tag is stored under the `$GIT_DIR/refs/tags` directory. git
|
||||||
imposes the following rules on how refs are named:
|
imposes the following rules on how references are named:
|
||||||
|
|
||||||
. It can include slash `/` for hierarchical (directory)
|
. They can include slash `/` for hierarchical (directory)
|
||||||
grouping, but no slash-separated component can begin with a
|
grouping, but no slash-separated component can begin with a
|
||||||
dot `.`;
|
dot `.`.
|
||||||
|
|
||||||
. It cannot have two consecutive dots `..` anywhere;
|
. They cannot have two consecutive dots `..` anywhere.
|
||||||
|
|
||||||
. It cannot have ASCII control character (i.e. bytes whose
|
. They cannot have ASCII control characters (i.e. bytes whose
|
||||||
values are lower than \040, or \177 `DEL`), space, tilde `~`,
|
values are lower than \040, or \177 `DEL`), space, tilde `~`,
|
||||||
caret `{caret}`, colon `:`, question-mark `?`, asterisk `*`,
|
caret `{caret}`, colon `:`, question-mark `?`, asterisk `*`,
|
||||||
or open bracket `[` anywhere;
|
or open bracket `[` anywhere.
|
||||||
|
|
||||||
. It cannot end with a slash `/`.
|
. They cannot end with a slash `/`.
|
||||||
|
|
||||||
These rules makes it easy for shell script based tools to parse
|
These rules make it easy for shell script based tools to parse
|
||||||
refnames, pathname expansion by the shell when a refname is used
|
reference names, pathname expansion by the shell when a reference name is used
|
||||||
unquoted (by mistake), and also avoids ambiguities in certain
|
unquoted (by mistake), and also avoids ambiguities in certain
|
||||||
refname expressions (see linkgit:git-rev-parse[1]). Namely:
|
reference name expressions (see linkgit:git-rev-parse[1]):
|
||||||
|
|
||||||
. double-dot `..` are often used as in `ref1..ref2`, and in some
|
. A double-dot `..` is often used as in `ref1..ref2`, and in some
|
||||||
context this notation means `{caret}ref1 ref2` (i.e. not in
|
contexts this notation means `{caret}ref1 ref2` (i.e. not in
|
||||||
ref1 and in ref2).
|
`ref1` and in `ref2`).
|
||||||
|
|
||||||
. tilde `~` and caret `{caret}` are used to introduce postfix
|
. A tilde `~` and caret `{caret}` are used to introduce the postfix
|
||||||
'nth parent' and 'peel onion' operation.
|
'nth parent' and 'peel onion' operation.
|
||||||
|
|
||||||
. colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
|
. A colon `:` is used as in `srcref:dstref` to mean "use srcref\'s
|
||||||
value and store it in dstref" in fetch and push operations.
|
value and store it in dstref" in fetch and push operations.
|
||||||
It may also be used to select a specific object such as with
|
It may also be used to select a specific object such as with
|
||||||
'git-cat-file': "git cat-file blob v1.3.3:refs.c".
|
'git-cat-file': "git cat-file blob v1.3.3:refs.c".
|
||||||
|
@ -5,22 +5,21 @@ canonical real names and email addresses.
|
|||||||
|
|
||||||
In the simple form, each line in the file consists of the canonical
|
In the simple form, each line in the file consists of the canonical
|
||||||
real name of an author, whitespace, and an email address used in the
|
real name of an author, whitespace, and an email address used in the
|
||||||
commit (enclosed by '<' and '>') to map to the name. Thus, looks like
|
commit (enclosed by '<' and '>') to map to the name. For example:
|
||||||
this
|
|
||||||
--
|
--
|
||||||
Proper Name <commit@email.xx>
|
Proper Name <commit@email.xx>
|
||||||
--
|
--
|
||||||
|
|
||||||
The more complex forms are
|
The more complex forms are:
|
||||||
--
|
--
|
||||||
<proper@email.xx> <commit@email.xx>
|
<proper@email.xx> <commit@email.xx>
|
||||||
--
|
--
|
||||||
which allows mailmap to replace only the email part of a commit, and
|
which allows mailmap to replace only the email part of a commit, and:
|
||||||
--
|
--
|
||||||
Proper Name <proper@email.xx> <commit@email.xx>
|
Proper Name <proper@email.xx> <commit@email.xx>
|
||||||
--
|
--
|
||||||
which allows mailmap to replace both the name and the email of a
|
which allows mailmap to replace both the name and the email of a
|
||||||
commit matching the specified commit email address, and
|
commit matching the specified commit email address, and:
|
||||||
--
|
--
|
||||||
Proper Name <proper@email.xx> Commit Name <commit@email.xx>
|
Proper Name <proper@email.xx> Commit Name <commit@email.xx>
|
||||||
--
|
--
|
||||||
@ -47,8 +46,8 @@ Jane Doe <jane@desktop.(none)>
|
|||||||
Joe R. Developer <joe@example.com>
|
Joe R. Developer <joe@example.com>
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Note how we don't need an entry for <jane@laptop.(none)>, because the
|
Note how there is no need for an entry for <jane@laptop.(none)>, because the
|
||||||
real name of that author is correct already.
|
real name of that author is already correct.
|
||||||
|
|
||||||
Example 2: Your repository contains commits from the following
|
Example 2: Your repository contains commits from the following
|
||||||
authors:
|
authors:
|
||||||
@ -62,7 +61,7 @@ claus <me@company.xx>
|
|||||||
CTO <cto@coompany.xx>
|
CTO <cto@coompany.xx>
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Then, you might want a `.mailmap` file looking like:
|
Then you might want a `.mailmap` file that looks like:
|
||||||
------------
|
------------
|
||||||
<cto@company.xx> <cto@coompany.xx>
|
<cto@company.xx> <cto@coompany.xx>
|
||||||
Some Dude <some@dude.xx> nick1 <bugs@company.xx>
|
Some Dude <some@dude.xx> nick1 <bugs@company.xx>
|
||||||
@ -72,4 +71,4 @@ Santa Claus <santa.claus@northpole.xx> <me@company.xx>
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
Use hash '#' for comments that are either on their own line, or after
|
Use hash '#' for comments that are either on their own line, or after
|
||||||
the email address.
|
the email address.
|
||||||
|
Loading…
Reference in New Issue
Block a user