Merge branch 'jc/em-dash-in-doc'
authorJunio C Hamano <gitster@pobox.com>
Thu, 29 Oct 2015 20:59:16 +0000 (13:59 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Oct 2015 20:59:16 +0000 (13:59 -0700)
AsciiDoc markup fixes.

* jc/em-dash-in-doc:
  Documentation: AsciiDoc spells em-dash as double-dashes, not triple

1  2 
Documentation/git-bisect.txt
Documentation/git-fetch.txt
Documentation/git-push.txt
Documentation/technical/index-format.txt

@@@ -3,7 -3,7 +3,7 @@@ git-bisect(1
  
  NAME
  ----
 -git-bisect - Find by binary search the change that introduced a bug
 +git-bisect - Use binary search to find the commit that introduced a bug
  
  
  SYNOPSIS
@@@ -16,89 -16,74 +16,89 @@@ DESCRIPTIO
  The command takes various subcommands, and different options depending
  on the subcommand:
  
 - git bisect help
 - git bisect start [--no-checkout] [<bad> [<good>...]] [--] [<paths>...]
 - git bisect bad [<rev>]
 - git bisect good [<rev>...]
 + git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]
 +                [--no-checkout] [<bad> [<good>...]] [--] [<paths>...]
 + git bisect (bad|new) [<rev>]
 + git bisect (good|old) [<rev>...]
 + git bisect terms [--term-good | --term-bad]
   git bisect skip [(<rev>|<range>)...]
   git bisect reset [<commit>]
   git bisect visualize
   git bisect replay <logfile>
   git bisect log
   git bisect run <cmd>...
 + git bisect help
  
 -This command uses 'git rev-list --bisect' to help drive the
 -binary search process to find which change introduced a bug, given an
 -old "good" commit object name and a later "bad" commit object name.
 -
 -Getting help
 -~~~~~~~~~~~~
 -
 -Use "git bisect" to get a short usage description, and "git bisect
 -help" or "git bisect -h" to get a long usage description.
 +This command uses a binary search algorithm to find which commit in
 +your project's history introduced a bug. You use it by first telling
 +it a "bad" commit that is known to contain the bug, and a "good"
 +commit that is known to be before the bug was introduced. Then `git
 +bisect` picks a commit between those two endpoints and asks you
 +whether the selected commit is "good" or "bad". It continues narrowing
 +down the range until it finds the exact commit that introduced the
 +change.
 +
 +In fact, `git bisect` can be used to find the commit that changed
 +*any* property of your project; e.g., the commit that fixed a bug, or
 +the commit that caused a benchmark's performance to improve. To
 +support this more general usage, the terms "old" and "new" can be used
 +in place of "good" and "bad", or you can choose your own terms. See
 +section "Alternate terms" below for more information.
  
  Basic bisect commands: start, bad, good
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
 -Using the Linux kernel tree as an example, basic use of the bisect
 -command is as follows:
 +As an example, suppose you are trying to find the commit that broke a
 +feature that was known to work in version `v2.6.13-rc2` of your
 +project. You start a bisect session as follows:
  
  ------------------------------------------------
  $ git bisect start
  $ git bisect bad                 # Current version is bad
 -$ git bisect good v2.6.13-rc2    # v2.6.13-rc2 was the last version
 -                                 # tested that was good
 +$ git bisect good v2.6.13-rc2    # v2.6.13-rc2 is known to be good
 +------------------------------------------------
 +
 +Once you have specified at least one bad and one good commit, `git
 +bisect` selects a commit in the middle of that range of history,
 +checks it out, and outputs something similar to the following:
 +
 +------------------------------------------------
 +Bisecting: 675 revisions left to test after this (roughly 10 steps)
  ------------------------------------------------
  
 -When you have specified at least one bad and one good version, the
 -command bisects the revision tree and outputs something similar to
 -the following:
 +You should now compile the checked-out version and test it. If that
 +version works correctly, type
  
  ------------------------------------------------
 -Bisecting: 675 revisions left to test after this
 +$ git bisect good
  ------------------------------------------------
  
 -The state in the middle of the set of revisions is then checked out.
 -You would now compile that kernel and boot it. If the booted kernel
 -works correctly, you would then issue the following command:
 +If that version is broken, type
  
  ------------------------------------------------
 -$ git bisect good                     # this one is good
 +$ git bisect bad
  ------------------------------------------------
  
 -The output of this command would be something similar to the following:
 +Then `git bisect` will respond with something like
  
  ------------------------------------------------
 -Bisecting: 337 revisions left to test after this
 +Bisecting: 337 revisions left to test after this (roughly 9 steps)
  ------------------------------------------------
  
 -You keep repeating this process, compiling the tree, testing it, and
 -depending on whether it is good or bad issuing the command "git bisect good"
 -or "git bisect bad" to ask for the next bisection.
 +Keep repeating the process: compile the tree, test it, and depending
 +on whether it is good or bad run `git bisect good` or `git bisect bad`
 +to ask for the next commit that needs testing.
 +
 +Eventually there will be no more revisions left to inspect, and the
 +command will print out a description of the first bad commit. The
 +reference `refs/bisect/bad` will be left pointing at that commit.
  
 -Eventually there will be no more revisions left to bisect, and you
 -will have been left with the first bad kernel revision in "refs/bisect/bad".
  
  Bisect reset
  ~~~~~~~~~~~~
  
  After a bisect session, to clean up the bisection state and return to
 -the original HEAD (i.e., to quit bisecting), issue the following command:
 +the original HEAD, issue the following command:
  
  ------------------------------------------------
  $ git bisect reset
@@@ -115,83 -100,9 +115,83 @@@ instead
  $ git bisect reset <commit>
  ------------------------------------------------
  
 -For example, `git bisect reset HEAD` will leave you on the current
 -bisection commit and avoid switching commits at all, while `git bisect
 -reset bisect/bad` will check out the first bad revision.
 +For example, `git bisect reset bisect/bad` will check out the first
 +bad revision, while `git bisect reset HEAD` will leave you on the
 +current bisection commit and avoid switching commits at all.
 +
 +
 +Alternate terms
 +~~~~~~~~~~~~~~~
 +
 +Sometimes you are not looking for the commit that introduced a
 +breakage, but rather for a commit that caused a change between some
 +other "old" state and "new" state. For example, you might be looking
 +for the commit that introduced a particular fix. Or you might be
 +looking for the first commit in which the source-code filenames were
 +finally all converted to your company's naming standard. Or whatever.
 +
 +In such cases it can be very confusing to use the terms "good" and
 +"bad" to refer to "the state before the change" and "the state after
 +the change". So instead, you can use the terms "old" and "new",
 +respectively, in place of "good" and "bad". (But note that you cannot
 +mix "good" and "bad" with "old" and "new" in a single session.)
 +
 +In this more general usage, you provide `git bisect` with a "new"
 +commit has some property and an "old" commit that doesn't have that
 +property. Each time `git bisect` checks out a commit, you test if that
 +commit has the property. If it does, mark the commit as "new";
 +otherwise, mark it as "old". When the bisection is done, `git bisect`
 +will report which commit introduced the property.
 +
 +To use "old" and "new" instead of "good" and bad, you must run `git
 +bisect start` without commits as argument and then run the following
 +commands to add the commits:
 +
 +------------------------------------------------
 +git bisect old [<rev>]
 +------------------------------------------------
 +
 +to indicate that a commit was before the sought change, or
 +
 +------------------------------------------------
 +git bisect new [<rev>...]
 +------------------------------------------------
 +
 +to indicate that it was after.
 +
 +To get a reminder of the currently used terms, use
 +
 +------------------------------------------------
 +git bisect terms
 +------------------------------------------------
 +
 +You can get just the old (respectively new) term with `git bisect term
 +--term-old` or `git bisect term --term-good`.
 +
 +If you would like to use your own terms instead of "bad"/"good" or
 +"new"/"old", you can choose any names you like (except existing bisect
 +subcommands like `reset`, `start`, ...) by starting the
 +bisection using
 +
 +------------------------------------------------
 +git bisect start --term-old <term-old> --term-new <term-new>
 +------------------------------------------------
 +
 +For example, if you are looking for a commit that introduced a
 +performance regression, you might use
 +
 +------------------------------------------------
 +git bisect start --term-old fast --term-new slow
 +------------------------------------------------
 +
 +Or if you are looking for the commit that fixed a bug, you might use
 +
 +------------------------------------------------
 +git bisect start --term-new fixed --term-old broken
 +------------------------------------------------
 +
 +Then, use `git bisect <term-old>` and `git bisect <term-new>` instead
 +of `git bisect good` and `git bisect bad` to mark commits.
  
  Bisect visualize
  ~~~~~~~~~~~~~~~~
@@@ -236,17 -147,17 +236,17 @@@ $ git bisect replay that-fil
  Avoiding testing a commit
  ~~~~~~~~~~~~~~~~~~~~~~~~~
  
 -If, in the middle of a bisect session, you know that the next suggested
 -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
 -does not have anything to do with the bug you are chasing), you may
 -want to find a nearby commit and try that instead.
 +If, in the middle of a bisect session, you know that the suggested
 +revision is not a good one to test (e.g. it fails to build and you
 +know that the failure does not have anything to do with the bug you
 +are chasing), you can manually select a nearby commit and test that
 +one instead.
  
  For example:
  
  ------------
  $ 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 (roughly 9 steps)
  $ git bisect visualize                        # oops, that is uninteresting.
  $ git reset --hard HEAD~3             # try 3 revisions before what
                                        # was suggested
@@@ -256,21 -167,20 +256,21 @@@ Then compile and test the chosen revisi
  the revision as good or bad in the usual manner.
  
  Bisect skip
 -~~~~~~~~~~~~
 +~~~~~~~~~~~
  
 -Instead of choosing by yourself a nearby commit, you can ask Git
 -to do it for you by issuing the command:
 +Instead of choosing a nearby commit by yourself, you can ask Git to do
 +it for you by issuing the command:
  
  ------------
  $ git bisect skip                 # Current version cannot be tested
  ------------
  
 -But Git may eventually be unable to tell the first bad commit among
 -a bad commit and one or more skipped commits.
 +However, if you skip a commit adjacent to the one you are looking for,
 +Git will be unable to tell exactly which of those commits was the
 +first bad one.
  
 -You can even skip a range of commits, instead of just one commit,
 -using the "'<commit1>'..'<commit2>'" notation. For example:
 +You can also skip a range of commits, instead of just one commit,
 +using range notation. For example:
  
  ------------
  $ git bisect skip v2.5..v2.6
@@@ -286,8 -196,8 +286,8 @@@ would issue the command
  $ git bisect skip v2.5 v2.5..v2.6
  ------------
  
 -This tells the bisect process that the commits between `v2.5` included
 -and `v2.6` included should be skipped.
 +This tells the bisect process that the commits between `v2.5` and
 +`v2.6` (inclusive) should be skipped.
  
  
  Cutting down bisection by giving more parameters to bisect start
@@@ -321,23 -231,23 +321,23 @@@ or bad, you can bisect by issuing the c
  $ git bisect run my_script arguments
  ------------
  
 -Note that the script (`my_script` in the above example) should
 -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
 -source code is bad.
 +Note that the script (`my_script` in the above example) should exit
 +with code 0 if the current source code is good/old, and exit with a
 +code between 1 and 127 (inclusive), except 125, if the current source
 +code is bad/new.
  
  Any other exit code will abort the bisect process. It should be noted
 -that a program that terminates via "exit(-1)" leaves $? = 255, (see the
 -exit(3) manual page), as the value is chopped with "& 0377".
 +that a program that terminates via `exit(-1)` leaves $? = 255, (see the
 +exit(3) manual page), as the value is chopped with `& 0377`.
  
  The special exit code 125 should be used when the current source code
  cannot be tested. If the script exits with this code, the current
  revision will be skipped (see `git bisect skip` above). 125 was chosen
  as the highest sensible value to use for this purpose, because 126 and 127
  are used by POSIX shells to signal specific error status (127 is for
- command not found, 126 is for command found but not executable---these
+ command not found, 126 is for command found but not executable--these
  details do not matter, as they are normal errors in the script, as far as
 -"bisect run" is concerned).
 +`bisect run` is concerned).
  
  You may often find that during a bisect session you want to have
  temporary modifications (e.g. s/#define DEBUG 0/#define DEBUG 1/ in a
@@@ -350,7 -260,7 +350,7 @@@ next revision to test, the script can a
  before compiling, run the real test, and afterwards decide if the
  revision (possibly with the needed patch) passed the test and then
  rewind the tree to the pristine state.  Finally the script should exit
 -with the status of the real test to let the "git bisect run" command loop
 +with the status of the real test to let the `git bisect run` command loop
  determine the eventual outcome of the bisect session.
  
  OPTIONS
@@@ -397,12 -307,12 +397,12 @@@ $ git bisect run ~/test.s
  $ git bisect reset                   # quit the bisect session
  ------------
  +
 -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.
 -"check_test_case.sh" should "exit 0" if the test case passes,
 -and "exit 1" otherwise.
 +`check_test_case.sh` should `exit 0` if the test case passes,
 +and `exit 1` otherwise.
  +
 -It is safer if both "test.sh" and "check_test_case.sh" are
 +It is safer if both `test.sh` and `check_test_case.sh` are
  outside the repository to prevent interactions between the bisect,
  make and test processes and the scripts.
  
@@@ -469,26 -379,6 +469,26 @@@ In this case, when 'git bisect run' fin
  has at least one parent whose reachable graph is fully traversable in the sense
  required by 'git pack objects'.
  
 +* Look for a fix instead of a regression in the code
 ++
 +------------
 +$ git bisect start
 +$ git bisect new HEAD    # current commit is marked as new
 +$ git bisect old HEAD~10 # the tenth commit from now is marked as old
 +------------
 ++
 +or:
 +------------
 +$ git bisect start --term-old broken --term-new fixed
 +$ git bisect fixed
 +$ git bisect broken HEAD~10
 +------------
 +
 +Getting help
 +~~~~~~~~~~~~
 +
 +Use `git bisect` to get a short usage description, and `git bisect
 +help` or `git bisect -h` to get a long usage description.
  
  SEE ALSO
  --------
@@@ -26,7 -26,7 +26,7 @@@ By default, any tag that points into th
  also fetched; the effect is to fetch tags that
  point at branches that you are interested in.  This default behavior
  can be changed by using the --tags or --no-tags options or by
 -configuring remote.<name>.tagopt.  By using a refspec that fetches tags
 +configuring remote.<name>.tagOpt.  By using a refspec that fetches tags
  explicitly, you can fetch tags that do not point into branches you
  are interested in as well.
  
@@@ -71,7 -71,7 +71,7 @@@ This configuration is used in two ways
  * When `git fetch` is run without specifying what branches
    and/or tags to fetch on the command line, e.g. `git fetch origin`
    or `git fetch`, `remote.<repository>.fetch` values are used as
-   the refspecs---they specify which refs to fetch and which local refs
+   the refspecs--they specify which refs to fetch and which local refs
    to update.  The example above will fetch
    all branches that exist in the `origin` (i.e. any ref that matches
    the left-hand side of the value, `refs/heads/*`) and update the
@@@ -9,10 -9,9 +9,10 @@@ git-push - Update remote refs along wit
  SYNOPSIS
  --------
  [verse]
 -'git push' [--all | --mirror | --tags] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
 +'git push' [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
           [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose]
 -         [-u | --set-upstream] [--signed]
 +         [-u | --set-upstream]
 +         [--[no-]signed|--sign=(true|false|if-asked)]
           [--force-with-lease[=<refname>[:<expect>]]]
           [--no-verify] [<repository> [<refspec>...]]
  
@@@ -62,7 -61,7 +62,7 @@@ be named
  If `git push [<repository>]` without any `<refspec>` argument is set to
  update some ref at the destination with `<src>` with
  `remote.<repository>.push` configuration variable, `:<dst>` part can
- be omitted---such a push will update a ref that `<src>` normally updates
+ be omitted--such a push will update a ref that `<src>` normally updates
  without any `<refspec>` on the command line.  Otherwise, missing
  `:<dst>` means to update the same ref as the `<src>`.
  +
@@@ -129,25 -128,13 +129,25 @@@ already exists on the remote side
        Push all the refs that would be pushed without this option,
        and also push annotated tags in `refs/tags` that are missing
        from the remote but are pointing at commit-ish that are
 -      reachable from the refs being pushed.
 +      reachable from the refs being pushed.  This can also be specified
 +      with configuration variable 'push.followTags'.  For more
 +      information, see 'push.followTags' in linkgit:git-config[1].
  
 ---signed::
 +--[no-]signed::
 +--sign=(true|false|if-asked)::
        GPG-sign the push request to update refs on the receiving
        side, to allow it to be checked by the hooks and/or be
 -      logged.  See linkgit:git-receive-pack[1] for the details
 -      on the receiving end.
 +      logged.  If `false` or `--no-signed`, no signing will be
 +      attempted.  If `true` or `--signed`, the push will fail if the
 +      server does not support signed pushes.  If set to `if-asked`,
 +      sign if and only if the server supports signed pushes.  The push
 +      will also fail if the actual call to `gpg --sign` fails.  See
 +      linkgit:git-receive-pack[1] for the details on the receiving end.
 +
 +--[no-]atomic::
 +      Use an atomic transaction on the remote side if available.
 +      Either all refs are updated, or on error, no refs are updated.
 +      If the server does not support atomic pushes the push will fail.
  
  --receive-pack=<git-receive-pack>::
  --exec=<git-receive-pack>::
        Usually, "git push" refuses to update a remote ref that is
        not an ancestor of the local ref used to overwrite it.
  +
 -This option bypasses the check, but instead requires that the
 -current value of the ref to be the expected value.  "git push"
 -fails otherwise.
 +This option overrides this restriction if the current value of the
 +remote ref is the expected value.  "git push" fails otherwise.
  +
  Imagine that you have to rebase what you have already published.
  You will have to bypass the "must fast-forward" rule in order to
@@@ -175,14 -163,15 +175,14 @@@ commit, and blindly pushing with `--for
  This option allows you to say that you expect the history you are
  updating is what you rebased and want to replace. If the remote ref
  still points at the commit you specified, you can be sure that no
 -other people did anything to the ref (it is like taking a "lease" on
 -the ref without explicitly locking it, and you update the ref while
 -making sure that your earlier "lease" is still valid).
 +other people did anything to the ref. It is like taking a "lease" on
 +the ref without explicitly locking it, and the remote ref is updated
 +only if the "lease" is still valid.
  +
  `--force-with-lease` alone, without specifying the details, will protect
  all remote refs that are going to be updated by requiring their
  current value to be the same as the remote-tracking branch we have
 -for them, unless specified with a `--force-with-lease=<refname>:<expect>`
 -option that explicitly states what the expected value is.
 +for them.
  +
  `--force-with-lease=<refname>`, without specifying the expected value, will
  protect the named ref (alone), if it is going to be updated, by
@@@ -225,8 -214,22 +225,8 @@@ origin +master` to force a push to the 
  `<refspec>...` section above for details.
  
  --repo=<repository>::
 -      This option is only relevant if no <repository> argument is
 -      passed in the invocation. In this case, 'git push' derives the
 -      remote name from the current branch: If it tracks a remote
 -      branch, then that remote repository is pushed to. Otherwise,
 -      the name "origin" is used. For this latter case, this option
 -      can be used to override the name "origin". In other words,
 -      the difference between these two commands
 -+
 ---------------------------
 -git push public         #1
 -git push --repo=public  #2
 ---------------------------
 -+
 -is that #1 always pushes to "public" whereas #2 pushes to "public"
 -only if the current branch does not track a remote branch. This is
 -useful if you write an alias or script around 'git push'.
 +      This option is equivalent to the <repository> argument. If both
 +      are specified, the command-line argument takes precedence.
  
  -u::
  --set-upstream::
  
  --[no-]verify::
        Toggle the pre-push hook (see linkgit:githooks[5]).  The
 -      default is \--verify, giving the hook a chance to prevent the
 -      push.  With \--no-verify, the hook is bypassed completely.
 +      default is --verify, giving the hook a chance to prevent the
 +      push.  With --no-verify, the hook is bypassed completely.
  
  
  include::urls-remotes.txt[]
@@@ -170,7 -170,7 +170,7 @@@ Git index forma
  
    The entries are written out in the top-down, depth-first order.  The
    first entry represents the root level of the repository, followed by the
-   first subtree---let's call this A---of the root level (with its name
+   first subtree--let's call this A--of the root level (with its name
    relative to the root level), followed by the first subtree of A (with
    its name relative to A), ...
  
    in a separate file. This extension records the changes to be made on
    top of that to produce the final index.
  
 -  The signature for this extension is { 'l', 'i, 'n', 'k' }.
 +  The signature for this extension is { 'l', 'i', 'n', 'k' }.
  
    The extension consists of:
  
    The remaining index entries after replaced ones will be added to the
    final index. These added entries are also sorted by entry name then
    stage.
 +
 +== Untracked cache
 +
 +  Untracked cache saves the untracked file list and necessary data to
 +  verify the cache. The signature for this extension is { 'U', 'N',
 +  'T', 'R' }.
 +
 +  The extension starts with
 +
 +  - A sequence of NUL-terminated strings, preceded by the size of the
 +    sequence in variable width encoding. Each string describes the
 +    environment where the cache can be used.
 +
 +  - Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
 +    ctime field until "file size".
 +
 +  - Stat data of core.excludesfile
 +
 +  - 32-bit dir_flags (see struct dir_struct)
 +
 +  - 160-bit SHA-1 of $GIT_DIR/info/exclude. Null SHA-1 means the file
 +    does not exist.
 +
 +  - 160-bit SHA-1 of core.excludesfile. Null SHA-1 means the file does
 +    not exist.
 +
 +  - NUL-terminated string of per-dir exclude file name. This usually
 +    is ".gitignore".
 +
 +  - The number of following directory blocks, variable width
 +    encoding. If this number is zero, the extension ends here with a
 +    following NUL.
 +
 +  - A number of directory blocks in depth-first-search order, each
 +    consists of
 +
 +    - The number of untracked entries, variable width encoding.
 +
 +    - The number of sub-directory blocks, variable width encoding.
 +
 +    - The directory name terminated by NUL.
 +
 +    - A number of untracked file/dir names terminated by NUL.
 +
 +The remaining data of each directory block is grouped by type:
 +
 +  - An ewah bitmap, the n-th bit marks whether the n-th directory has
 +    valid untracked cache entries.
 +
 +  - An ewah bitmap, the n-th bit records "check-only" bit of
 +    read_directory_recursive() for the n-th directory.
 +
 +  - An ewah bitmap, the n-th bit indicates whether SHA-1 and stat data
 +    is valid for the n-th directory and exists in the next data.
 +
 +  - An array of stat data. The n-th data corresponds with the n-th
 +    "one" bit in the previous ewah bitmap.
 +
 +  - An array of SHA-1. The n-th SHA-1 corresponds with the n-th "one" bit
 +    in the previous ewah bitmap.
 +
 +  - One NUL.