Documentation / git.txton commit Merge branch 'mb/fetch-call-a-non-branch-a-ref' into maint (66bca3f)
   1git(1)
   2======
   3
   4NAME
   5----
   6git - the stupid content tracker
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git' [--version] [--help] [-c <name>=<value>]
  13    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
  14    [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
  15    [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
  16    <command> [<args>]
  17
  18DESCRIPTION
  19-----------
  20Git is a fast, scalable, distributed revision control system with an
  21unusually rich command set that provides both high-level operations
  22and full access to internals.
  23
  24See linkgit:gittutorial[7] to get started, then see
  25link:everyday.html[Everyday Git] for a useful minimum set of commands, and
  26"man git-commandname" for documentation of each command.  CVS users may
  27also want to read linkgit:gitcvs-migration[7].  See
  28the link:user-manual.html[Git User's Manual] for a more in-depth
  29introduction.
  30
  31The '<command>' is either a name of a Git command (see below) or an alias
  32as defined in the configuration file (see linkgit:git-config[1]).
  33
  34Formatted and hyperlinked version of the latest git
  35documentation can be viewed at
  36`http://www.kernel.org/pub/software/scm/git/docs/`.
  37
  38ifdef::stalenotes[]
  39[NOTE]
  40============
  41
  42You are reading the documentation for the latest (possibly
  43unreleased) version of git, that is available from 'master'
  44branch of the `git.git` repository.
  45Documentation for older releases are available here:
  46
  47* link:v1.7.10.1/git.html[documentation for release 1.7.10.1]
  48
  49* release notes for
  50  link:RelNotes/1.7.10.1.txt[1.7.10.1],
  51  link:RelNotes/1.7.10.txt[1.7.10].
  52
  53* link:v1.7.9.7/git.html[documentation for release 1.7.9.7]
  54
  55* release notes for
  56  link:RelNotes/1.7.9.7.txt[1.7.9.7],
  57  link:RelNotes/1.7.9.6.txt[1.7.9.6],
  58  link:RelNotes/1.7.9.5.txt[1.7.9.5],
  59  link:RelNotes/1.7.9.4.txt[1.7.9.4],
  60  link:RelNotes/1.7.9.3.txt[1.7.9.3],
  61  link:RelNotes/1.7.9.2.txt[1.7.9.2],
  62  link:RelNotes/1.7.9.1.txt[1.7.9.1],
  63  link:RelNotes/1.7.9.txt[1.7.9].
  64
  65* link:v1.7.8.6/git.html[documentation for release 1.7.8.6]
  66
  67* release notes for
  68  link:RelNotes/1.7.8.6.txt[1.7.8.6],
  69  link:RelNotes/1.7.8.5.txt[1.7.8.5],
  70  link:RelNotes/1.7.8.4.txt[1.7.8.4],
  71  link:RelNotes/1.7.8.3.txt[1.7.8.3],
  72  link:RelNotes/1.7.8.2.txt[1.7.8.2],
  73  link:RelNotes/1.7.8.1.txt[1.7.8.1],
  74  link:RelNotes/1.7.8.txt[1.7.8].
  75
  76* link:v1.7.7.7/git.html[documentation for release 1.7.7.7]
  77
  78* release notes for
  79  link:RelNotes/1.7.7.7.txt[1.7.7.7],
  80  link:RelNotes/1.7.7.6.txt[1.7.7.6],
  81  link:RelNotes/1.7.7.5.txt[1.7.7.5],
  82  link:RelNotes/1.7.7.4.txt[1.7.7.4],
  83  link:RelNotes/1.7.7.3.txt[1.7.7.3],
  84  link:RelNotes/1.7.7.2.txt[1.7.7.2],
  85  link:RelNotes/1.7.7.1.txt[1.7.7.1],
  86  link:RelNotes/1.7.7.txt[1.7.7].
  87
  88* link:v1.7.6.6/git.html[documentation for release 1.7.6.6]
  89
  90* release notes for
  91  link:RelNotes/1.7.6.6.txt[1.7.6.6],
  92  link:RelNotes/1.7.6.5.txt[1.7.6.5],
  93  link:RelNotes/1.7.6.4.txt[1.7.6.4],
  94  link:RelNotes/1.7.6.3.txt[1.7.6.3],
  95  link:RelNotes/1.7.6.2.txt[1.7.6.2],
  96  link:RelNotes/1.7.6.1.txt[1.7.6.1],
  97  link:RelNotes/1.7.6.txt[1.7.6].
  98
  99* link:v1.7.5.4/git.html[documentation for release 1.7.5.4]
 100
 101* release notes for
 102  link:RelNotes/1.7.5.4.txt[1.7.5.4],
 103  link:RelNotes/1.7.5.3.txt[1.7.5.3],
 104  link:RelNotes/1.7.5.2.txt[1.7.5.2],
 105  link:RelNotes/1.7.5.1.txt[1.7.5.1],
 106  link:RelNotes/1.7.5.txt[1.7.5].
 107
 108* link:v1.7.4.5/git.html[documentation for release 1.7.4.5]
 109
 110* release notes for
 111  link:RelNotes/1.7.4.5.txt[1.7.4.5],
 112  link:RelNotes/1.7.4.4.txt[1.7.4.4],
 113  link:RelNotes/1.7.4.3.txt[1.7.4.3],
 114  link:RelNotes/1.7.4.2.txt[1.7.4.2],
 115  link:RelNotes/1.7.4.1.txt[1.7.4.1],
 116  link:RelNotes/1.7.4.txt[1.7.4].
 117
 118* link:v1.7.3.5/git.html[documentation for release 1.7.3.5]
 119
 120* release notes for
 121  link:RelNotes/1.7.3.5.txt[1.7.3.5],
 122  link:RelNotes/1.7.3.4.txt[1.7.3.4],
 123  link:RelNotes/1.7.3.3.txt[1.7.3.3],
 124  link:RelNotes/1.7.3.2.txt[1.7.3.2],
 125  link:RelNotes/1.7.3.1.txt[1.7.3.1],
 126  link:RelNotes/1.7.3.txt[1.7.3].
 127
 128* link:v1.7.2.5/git.html[documentation for release 1.7.2.5]
 129
 130* release notes for
 131  link:RelNotes/1.7.2.5.txt[1.7.2.5],
 132  link:RelNotes/1.7.2.4.txt[1.7.2.4],
 133  link:RelNotes/1.7.2.3.txt[1.7.2.3],
 134  link:RelNotes/1.7.2.2.txt[1.7.2.2],
 135  link:RelNotes/1.7.2.1.txt[1.7.2.1],
 136  link:RelNotes/1.7.2.txt[1.7.2].
 137
 138* link:v1.7.1.4/git.html[documentation for release 1.7.1.4]
 139
 140* release notes for
 141  link:RelNotes/1.7.1.4.txt[1.7.1.4],
 142  link:RelNotes/1.7.1.3.txt[1.7.1.3],
 143  link:RelNotes/1.7.1.2.txt[1.7.1.2],
 144  link:RelNotes/1.7.1.1.txt[1.7.1.1],
 145  link:RelNotes/1.7.1.txt[1.7.1].
 146
 147* link:v1.7.0.9/git.html[documentation for release 1.7.0.9]
 148
 149* release notes for
 150  link:RelNotes/1.7.0.9.txt[1.7.0.9],
 151  link:RelNotes/1.7.0.8.txt[1.7.0.8],
 152  link:RelNotes/1.7.0.7.txt[1.7.0.7],
 153  link:RelNotes/1.7.0.6.txt[1.7.0.6],
 154  link:RelNotes/1.7.0.5.txt[1.7.0.5],
 155  link:RelNotes/1.7.0.4.txt[1.7.0.4],
 156  link:RelNotes/1.7.0.3.txt[1.7.0.3],
 157  link:RelNotes/1.7.0.2.txt[1.7.0.2],
 158  link:RelNotes/1.7.0.1.txt[1.7.0.1],
 159  link:RelNotes/1.7.0.txt[1.7.0].
 160
 161* link:v1.6.6.3/git.html[documentation for release 1.6.6.3]
 162
 163* release notes for
 164  link:RelNotes/1.6.6.3.txt[1.6.6.3],
 165  link:RelNotes/1.6.6.2.txt[1.6.6.2],
 166  link:RelNotes/1.6.6.1.txt[1.6.6.1],
 167  link:RelNotes/1.6.6.txt[1.6.6].
 168
 169* link:v1.6.5.9/git.html[documentation for release 1.6.5.9]
 170
 171* release notes for
 172  link:RelNotes/1.6.5.9.txt[1.6.5.9],
 173  link:RelNotes/1.6.5.8.txt[1.6.5.8],
 174  link:RelNotes/1.6.5.7.txt[1.6.5.7],
 175  link:RelNotes/1.6.5.6.txt[1.6.5.6],
 176  link:RelNotes/1.6.5.5.txt[1.6.5.5],
 177  link:RelNotes/1.6.5.4.txt[1.6.5.4],
 178  link:RelNotes/1.6.5.3.txt[1.6.5.3],
 179  link:RelNotes/1.6.5.2.txt[1.6.5.2],
 180  link:RelNotes/1.6.5.1.txt[1.6.5.1],
 181  link:RelNotes/1.6.5.txt[1.6.5].
 182
 183* link:v1.6.4.5/git.html[documentation for release 1.6.4.5]
 184
 185* release notes for
 186  link:RelNotes/1.6.4.5.txt[1.6.4.5],
 187  link:RelNotes/1.6.4.4.txt[1.6.4.4],
 188  link:RelNotes/1.6.4.3.txt[1.6.4.3],
 189  link:RelNotes/1.6.4.2.txt[1.6.4.2],
 190  link:RelNotes/1.6.4.1.txt[1.6.4.1],
 191  link:RelNotes/1.6.4.txt[1.6.4].
 192
 193* link:v1.6.3.4/git.html[documentation for release 1.6.3.4]
 194
 195* release notes for
 196  link:RelNotes/1.6.3.4.txt[1.6.3.4],
 197  link:RelNotes/1.6.3.3.txt[1.6.3.3],
 198  link:RelNotes/1.6.3.2.txt[1.6.3.2],
 199  link:RelNotes/1.6.3.1.txt[1.6.3.1],
 200  link:RelNotes/1.6.3.txt[1.6.3].
 201
 202* release notes for
 203  link:RelNotes/1.6.2.5.txt[1.6.2.5],
 204  link:RelNotes/1.6.2.4.txt[1.6.2.4],
 205  link:RelNotes/1.6.2.3.txt[1.6.2.3],
 206  link:RelNotes/1.6.2.2.txt[1.6.2.2],
 207  link:RelNotes/1.6.2.1.txt[1.6.2.1],
 208  link:RelNotes/1.6.2.txt[1.6.2].
 209
 210* link:v1.6.1.3/git.html[documentation for release 1.6.1.3]
 211
 212* release notes for
 213  link:RelNotes/1.6.1.3.txt[1.6.1.3],
 214  link:RelNotes/1.6.1.2.txt[1.6.1.2],
 215  link:RelNotes/1.6.1.1.txt[1.6.1.1],
 216  link:RelNotes/1.6.1.txt[1.6.1].
 217
 218* link:v1.6.0.6/git.html[documentation for release 1.6.0.6]
 219
 220* release notes for
 221  link:RelNotes/1.6.0.6.txt[1.6.0.6],
 222  link:RelNotes/1.6.0.5.txt[1.6.0.5],
 223  link:RelNotes/1.6.0.4.txt[1.6.0.4],
 224  link:RelNotes/1.6.0.3.txt[1.6.0.3],
 225  link:RelNotes/1.6.0.2.txt[1.6.0.2],
 226  link:RelNotes/1.6.0.1.txt[1.6.0.1],
 227  link:RelNotes/1.6.0.txt[1.6.0].
 228
 229* link:v1.5.6.6/git.html[documentation for release 1.5.6.6]
 230
 231* release notes for
 232  link:RelNotes/1.5.6.6.txt[1.5.6.6],
 233  link:RelNotes/1.5.6.5.txt[1.5.6.5],
 234  link:RelNotes/1.5.6.4.txt[1.5.6.4],
 235  link:RelNotes/1.5.6.3.txt[1.5.6.3],
 236  link:RelNotes/1.5.6.2.txt[1.5.6.2],
 237  link:RelNotes/1.5.6.1.txt[1.5.6.1],
 238  link:RelNotes/1.5.6.txt[1.5.6].
 239
 240* link:v1.5.5.6/git.html[documentation for release 1.5.5.6]
 241
 242* release notes for
 243  link:RelNotes/1.5.5.6.txt[1.5.5.6],
 244  link:RelNotes/1.5.5.5.txt[1.5.5.5],
 245  link:RelNotes/1.5.5.4.txt[1.5.5.4],
 246  link:RelNotes/1.5.5.3.txt[1.5.5.3],
 247  link:RelNotes/1.5.5.2.txt[1.5.5.2],
 248  link:RelNotes/1.5.5.1.txt[1.5.5.1],
 249  link:RelNotes/1.5.5.txt[1.5.5].
 250
 251* link:v1.5.4.7/git.html[documentation for release 1.5.4.7]
 252
 253* release notes for
 254  link:RelNotes/1.5.4.7.txt[1.5.4.7],
 255  link:RelNotes/1.5.4.6.txt[1.5.4.6],
 256  link:RelNotes/1.5.4.5.txt[1.5.4.5],
 257  link:RelNotes/1.5.4.4.txt[1.5.4.4],
 258  link:RelNotes/1.5.4.3.txt[1.5.4.3],
 259  link:RelNotes/1.5.4.2.txt[1.5.4.2],
 260  link:RelNotes/1.5.4.1.txt[1.5.4.1],
 261  link:RelNotes/1.5.4.txt[1.5.4].
 262
 263* link:v1.5.3.8/git.html[documentation for release 1.5.3.8]
 264
 265* release notes for
 266  link:RelNotes/1.5.3.8.txt[1.5.3.8],
 267  link:RelNotes/1.5.3.7.txt[1.5.3.7],
 268  link:RelNotes/1.5.3.6.txt[1.5.3.6],
 269  link:RelNotes/1.5.3.5.txt[1.5.3.5],
 270  link:RelNotes/1.5.3.4.txt[1.5.3.4],
 271  link:RelNotes/1.5.3.3.txt[1.5.3.3],
 272  link:RelNotes/1.5.3.2.txt[1.5.3.2],
 273  link:RelNotes/1.5.3.1.txt[1.5.3.1],
 274  link:RelNotes/1.5.3.txt[1.5.3].
 275
 276* link:v1.5.2.5/git.html[documentation for release 1.5.2.5]
 277
 278* release notes for
 279  link:RelNotes/1.5.2.5.txt[1.5.2.5],
 280  link:RelNotes/1.5.2.4.txt[1.5.2.4],
 281  link:RelNotes/1.5.2.3.txt[1.5.2.3],
 282  link:RelNotes/1.5.2.2.txt[1.5.2.2],
 283  link:RelNotes/1.5.2.1.txt[1.5.2.1],
 284  link:RelNotes/1.5.2.txt[1.5.2].
 285
 286* link:v1.5.1.6/git.html[documentation for release 1.5.1.6]
 287
 288* release notes for
 289  link:RelNotes/1.5.1.6.txt[1.5.1.6],
 290  link:RelNotes/1.5.1.5.txt[1.5.1.5],
 291  link:RelNotes/1.5.1.4.txt[1.5.1.4],
 292  link:RelNotes/1.5.1.3.txt[1.5.1.3],
 293  link:RelNotes/1.5.1.2.txt[1.5.1.2],
 294  link:RelNotes/1.5.1.1.txt[1.5.1.1],
 295  link:RelNotes/1.5.1.txt[1.5.1].
 296
 297* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]
 298
 299* release notes for
 300  link:RelNotes/1.5.0.7.txt[1.5.0.7],
 301  link:RelNotes/1.5.0.6.txt[1.5.0.6],
 302  link:RelNotes/1.5.0.5.txt[1.5.0.5],
 303  link:RelNotes/1.5.0.3.txt[1.5.0.3],
 304  link:RelNotes/1.5.0.2.txt[1.5.0.2],
 305  link:RelNotes/1.5.0.1.txt[1.5.0.1],
 306  link:RelNotes/1.5.0.txt[1.5.0].
 307
 308* documentation for release link:v1.4.4.4/git.html[1.4.4.4],
 309  link:v1.3.3/git.html[1.3.3],
 310  link:v1.2.6/git.html[1.2.6],
 311  link:v1.0.13/git.html[1.0.13].
 312
 313============
 314
 315endif::stalenotes[]
 316
 317OPTIONS
 318-------
 319--version::
 320        Prints the git suite version that the 'git' program came from.
 321
 322--help::
 323        Prints the synopsis and a list of the most commonly used
 324        commands. If the option '--all' or '-a' is given then all
 325        available commands are printed. If a git command is named this
 326        option will bring up the manual page for that command.
 327+
 328Other options are available to control how the manual page is
 329displayed. See linkgit:git-help[1] for more information,
 330because `git --help ...` is converted internally into `git
 331help ...`.
 332
 333-c <name>=<value>::
 334        Pass a configuration parameter to the command. The value
 335        given will override values from configuration files.
 336        The <name> is expected in the same format as listed by
 337        'git config' (subkeys separated by dots).
 338
 339--exec-path[=<path>]::
 340        Path to wherever your core git programs are installed.
 341        This can also be controlled by setting the GIT_EXEC_PATH
 342        environment variable. If no path is given, 'git' will print
 343        the current setting and then exit.
 344
 345--html-path::
 346        Print the path, without trailing slash, where git's HTML
 347        documentation is installed and exit.
 348
 349--man-path::
 350        Print the manpath (see `man(1)`) for the man pages for
 351        this version of git and exit.
 352
 353--info-path::
 354        Print the path where the Info files documenting this
 355        version of git are installed and exit.
 356
 357-p::
 358--paginate::
 359        Pipe all output into 'less' (or if set, $PAGER) if standard
 360        output is a terminal.  This overrides the `pager.<cmd>`
 361        configuration options (see the "Configuration Mechanism" section
 362        below).
 363
 364--no-pager::
 365        Do not pipe git output into a pager.
 366
 367--git-dir=<path>::
 368        Set the path to the repository. This can also be controlled by
 369        setting the GIT_DIR environment variable. It can be an absolute
 370        path or relative path to current working directory.
 371
 372--work-tree=<path>::
 373        Set the path to the working tree. It can be an absolute path
 374        or a path relative to the current working directory.
 375        This can also be controlled by setting the GIT_WORK_TREE
 376        environment variable and the core.worktree configuration
 377        variable (see core.worktree in linkgit:git-config[1] for a
 378        more detailed discussion).
 379
 380--namespace=<path>::
 381        Set the git namespace.  See linkgit:gitnamespaces[7] for more
 382        details.  Equivalent to setting the `GIT_NAMESPACE` environment
 383        variable.
 384
 385--bare::
 386        Treat the repository as a bare repository.  If GIT_DIR
 387        environment is not set, it is set to the current working
 388        directory.
 389
 390--no-replace-objects::
 391        Do not use replacement refs to replace git objects. See
 392        linkgit:git-replace[1] for more information.
 393
 394
 395FURTHER DOCUMENTATION
 396---------------------
 397
 398See the references above to get started using git.  The following is
 399probably more detail than necessary for a first-time user.
 400
 401The link:user-manual.html#git-concepts[git concepts chapter of the
 402user-manual] and linkgit:gitcore-tutorial[7] both provide
 403introductions to the underlying git architecture.
 404
 405See linkgit:gitworkflows[7] for an overview of recommended workflows.
 406
 407See also the link:howto-index.html[howto] documents for some useful
 408examples.
 409
 410The internals are documented in the
 411link:technical/api-index.html[GIT API documentation].
 412
 413GIT COMMANDS
 414------------
 415
 416We divide git into high level ("porcelain") commands and low level
 417("plumbing") commands.
 418
 419High-level commands (porcelain)
 420-------------------------------
 421
 422We separate the porcelain commands into the main commands and some
 423ancillary user utilities.
 424
 425Main porcelain commands
 426~~~~~~~~~~~~~~~~~~~~~~~
 427
 428include::cmds-mainporcelain.txt[]
 429
 430Ancillary Commands
 431~~~~~~~~~~~~~~~~~~
 432Manipulators:
 433
 434include::cmds-ancillarymanipulators.txt[]
 435
 436Interrogators:
 437
 438include::cmds-ancillaryinterrogators.txt[]
 439
 440
 441Interacting with Others
 442~~~~~~~~~~~~~~~~~~~~~~~
 443
 444These commands are to interact with foreign SCM and with other
 445people via patch over e-mail.
 446
 447include::cmds-foreignscminterface.txt[]
 448
 449
 450Low-level commands (plumbing)
 451-----------------------------
 452
 453Although git includes its
 454own porcelain layer, its low-level commands are sufficient to support
 455development of alternative porcelains.  Developers of such porcelains
 456might start by reading about linkgit:git-update-index[1] and
 457linkgit:git-read-tree[1].
 458
 459The interface (input, output, set of options and the semantics)
 460to these low-level commands are meant to be a lot more stable
 461than Porcelain level commands, because these commands are
 462primarily for scripted use.  The interface to Porcelain commands
 463on the other hand are subject to change in order to improve the
 464end user experience.
 465
 466The following description divides
 467the low-level commands into commands that manipulate objects (in
 468the repository, index, and working tree), commands that interrogate and
 469compare objects, and commands that move objects and references between
 470repositories.
 471
 472
 473Manipulation commands
 474~~~~~~~~~~~~~~~~~~~~~
 475
 476include::cmds-plumbingmanipulators.txt[]
 477
 478
 479Interrogation commands
 480~~~~~~~~~~~~~~~~~~~~~~
 481
 482include::cmds-plumbinginterrogators.txt[]
 483
 484In general, the interrogate commands do not touch the files in
 485the working tree.
 486
 487
 488Synching repositories
 489~~~~~~~~~~~~~~~~~~~~~
 490
 491include::cmds-synchingrepositories.txt[]
 492
 493The following are helper commands used by the above; end users
 494typically do not use them directly.
 495
 496include::cmds-synchelpers.txt[]
 497
 498
 499Internal helper commands
 500~~~~~~~~~~~~~~~~~~~~~~~~
 501
 502These are internal helper commands used by other commands; end
 503users typically do not use them directly.
 504
 505include::cmds-purehelpers.txt[]
 506
 507
 508Configuration Mechanism
 509-----------------------
 510
 511Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
 512is used to hold per-repository configuration options.  It is a
 513simple text file modeled after `.ini` format familiar to some
 514people.  Here is an example:
 515
 516------------
 517#
 518# A '#' or ';' character indicates a comment.
 519#
 520
 521; core variables
 522[core]
 523        ; Don't trust file modes
 524        filemode = false
 525
 526; user identity
 527[user]
 528        name = "Junio C Hamano"
 529        email = "junkio@twinsun.com"
 530
 531------------
 532
 533Various commands read from the configuration file and adjust
 534their operation accordingly.  See linkgit:git-config[1] for a
 535list.
 536
 537
 538Identifier Terminology
 539----------------------
 540<object>::
 541        Indicates the object name for any type of object.
 542
 543<blob>::
 544        Indicates a blob object name.
 545
 546<tree>::
 547        Indicates a tree object name.
 548
 549<commit>::
 550        Indicates a commit object name.
 551
 552<tree-ish>::
 553        Indicates a tree, commit or tag object name.  A
 554        command that takes a <tree-ish> argument ultimately wants to
 555        operate on a <tree> object but automatically dereferences
 556        <commit> and <tag> objects that point at a <tree>.
 557
 558<commit-ish>::
 559        Indicates a commit or tag object name.  A
 560        command that takes a <commit-ish> argument ultimately wants to
 561        operate on a <commit> object but automatically dereferences
 562        <tag> objects that point at a <commit>.
 563
 564<type>::
 565        Indicates that an object type is required.
 566        Currently one of: `blob`, `tree`, `commit`, or `tag`.
 567
 568<file>::
 569        Indicates a filename - almost always relative to the
 570        root of the tree structure `GIT_INDEX_FILE` describes.
 571
 572Symbolic Identifiers
 573--------------------
 574Any git command accepting any <object> can also use the following
 575symbolic notation:
 576
 577HEAD::
 578        indicates the head of the current branch.
 579
 580<tag>::
 581        a valid tag 'name'
 582        (i.e. a `refs/tags/<tag>` reference).
 583
 584<head>::
 585        a valid head 'name'
 586        (i.e. a `refs/heads/<head>` reference).
 587
 588For a more complete list of ways to spell object names, see
 589"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
 590
 591
 592File/Directory Structure
 593------------------------
 594
 595Please see the linkgit:gitrepository-layout[5] document.
 596
 597Read linkgit:githooks[5] for more details about each hook.
 598
 599Higher level SCMs may provide and manage additional information in the
 600`$GIT_DIR`.
 601
 602
 603Terminology
 604-----------
 605Please see linkgit:gitglossary[7].
 606
 607
 608Environment Variables
 609---------------------
 610Various git commands use the following environment variables:
 611
 612The git Repository
 613~~~~~~~~~~~~~~~~~~
 614These environment variables apply to 'all' core git commands. Nb: it
 615is worth noting that they may be used/overridden by SCMS sitting above
 616git so take care if using Cogito etc.
 617
 618'GIT_INDEX_FILE'::
 619        This environment allows the specification of an alternate
 620        index file. If not specified, the default of `$GIT_DIR/index`
 621        is used.
 622
 623'GIT_OBJECT_DIRECTORY'::
 624        If the object storage directory is specified via this
 625        environment variable then the sha1 directories are created
 626        underneath - otherwise the default `$GIT_DIR/objects`
 627        directory is used.
 628
 629'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
 630        Due to the immutable nature of git objects, old objects can be
 631        archived into shared, read-only directories. This variable
 632        specifies a ":" separated (on Windows ";" separated) list
 633        of git object directories which can be used to search for git
 634        objects. New objects will not be written to these directories.
 635
 636'GIT_DIR'::
 637        If the 'GIT_DIR' environment variable is set then it
 638        specifies a path to use instead of the default `.git`
 639        for the base of the repository.
 640
 641'GIT_WORK_TREE'::
 642        Set the path to the working tree.  The value will not be
 643        used in combination with repositories found automatically in
 644        a .git directory (i.e. $GIT_DIR is not set).
 645        This can also be controlled by the '--work-tree' command line
 646        option and the core.worktree configuration variable.
 647
 648'GIT_NAMESPACE'::
 649        Set the git namespace; see linkgit:gitnamespaces[7] for details.
 650        The '--namespace' command-line option also sets this value.
 651
 652'GIT_CEILING_DIRECTORIES'::
 653        This should be a colon-separated list of absolute paths.
 654        If set, it is a list of directories that git should not chdir
 655        up into while looking for a repository directory.
 656        It will not exclude the current working directory or
 657        a GIT_DIR set on the command line or in the environment.
 658        (Useful for excluding slow-loading network directories.)
 659
 660'GIT_DISCOVERY_ACROSS_FILESYSTEM'::
 661        When run in a directory that does not have ".git" repository
 662        directory, git tries to find such a directory in the parent
 663        directories to find the top of the working tree, but by default it
 664        does not cross filesystem boundaries.  This environment variable
 665        can be set to true to tell git not to stop at filesystem
 666        boundaries.  Like 'GIT_CEILING_DIRECTORIES', this will not affect
 667        an explicit repository directory set via 'GIT_DIR' or on the
 668        command line.
 669
 670git Commits
 671~~~~~~~~~~~
 672'GIT_AUTHOR_NAME'::
 673'GIT_AUTHOR_EMAIL'::
 674'GIT_AUTHOR_DATE'::
 675'GIT_COMMITTER_NAME'::
 676'GIT_COMMITTER_EMAIL'::
 677'GIT_COMMITTER_DATE'::
 678'EMAIL'::
 679        see linkgit:git-commit-tree[1]
 680
 681git Diffs
 682~~~~~~~~~
 683'GIT_DIFF_OPTS'::
 684        Only valid setting is "--unified=??" or "-u??" to set the
 685        number of context lines shown when a unified diff is created.
 686        This takes precedence over any "-U" or "--unified" option
 687        value passed on the git diff command line.
 688
 689'GIT_EXTERNAL_DIFF'::
 690        When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
 691        program named by it is called, instead of the diff invocation
 692        described above.  For a path that is added, removed, or modified,
 693        'GIT_EXTERNAL_DIFF' is called with 7 parameters:
 694
 695        path old-file old-hex old-mode new-file new-hex new-mode
 696+
 697where:
 698
 699        <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
 700                         contents of <old|new>,
 701        <old|new>-hex:: are the 40-hexdigit SHA1 hashes,
 702        <old|new>-mode:: are the octal representation of the file modes.
 703+
 704The file parameters can point at the user's working file
 705(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
 706when a new file is added), or a temporary file (e.g. `old-file` in the
 707index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
 708temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
 709+
 710For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
 711parameter, <path>.
 712
 713other
 714~~~~~
 715'GIT_MERGE_VERBOSITY'::
 716        A number controlling the amount of output shown by
 717        the recursive merge strategy.  Overrides merge.verbosity.
 718        See linkgit:git-merge[1]
 719
 720'GIT_PAGER'::
 721        This environment variable overrides `$PAGER`. If it is set
 722        to an empty string or to the value "cat", git will not launch
 723        a pager.  See also the `core.pager` option in
 724        linkgit:git-config[1].
 725
 726'GIT_EDITOR'::
 727        This environment variable overrides `$EDITOR` and `$VISUAL`.
 728        It is used by several git comands when, on interactive mode,
 729        an editor is to be launched. See also linkgit:git-var[1]
 730        and the `core.editor` option in linkgit:git-config[1].
 731
 732'GIT_SSH'::
 733        If this environment variable is set then 'git fetch'
 734        and 'git push' will use this command instead
 735        of 'ssh' when they need to connect to a remote system.
 736        The '$GIT_SSH' command will be given exactly two arguments:
 737        the 'username@host' (or just 'host') from the URL and the
 738        shell command to execute on that remote system.
 739+
 740To pass options to the program that you want to list in GIT_SSH
 741you will need to wrap the program and options into a shell script,
 742then set GIT_SSH to refer to the shell script.
 743+
 744Usually it is easier to configure any desired options through your
 745personal `.ssh/config` file.  Please consult your ssh documentation
 746for further details.
 747
 748'GIT_ASKPASS'::
 749        If this environment variable is set, then git commands which need to
 750        acquire passwords or passphrases (e.g. for HTTP or IMAP authentication)
 751        will call this program with a suitable prompt as command line argument
 752        and read the password from its STDOUT. See also the 'core.askpass'
 753        option in linkgit:git-config[1].
 754
 755'GIT_FLUSH'::
 756        If this environment variable is set to "1", then commands such
 757        as 'git blame' (in incremental mode), 'git rev-list', 'git log',
 758        and 'git whatchanged' will force a flush of the output stream
 759        after each commit-oriented record have been flushed.   If this
 760        variable is set to "0", the output of these commands will be done
 761        using completely buffered I/O.   If this environment variable is
 762        not set, git will choose buffered or record-oriented flushing
 763        based on whether stdout appears to be redirected to a file or not.
 764
 765'GIT_TRACE'::
 766        If this variable is set to "1", "2" or "true" (comparison
 767        is case insensitive), git will print `trace:` messages on
 768        stderr telling about alias expansion, built-in command
 769        execution and external command execution.
 770        If this variable is set to an integer value greater than 1
 771        and lower than 10 (strictly) then git will interpret this
 772        value as an open file descriptor and will try to write the
 773        trace messages into this file descriptor.
 774        Alternatively, if this variable is set to an absolute path
 775        (starting with a '/' character), git will interpret this
 776        as a file path and will try to write the trace messages
 777        into it.
 778
 779Discussion[[Discussion]]
 780------------------------
 781
 782More detail on the following is available from the
 783link:user-manual.html#git-concepts[git concepts chapter of the
 784user-manual] and linkgit:gitcore-tutorial[7].
 785
 786A git project normally consists of a working directory with a ".git"
 787subdirectory at the top level.  The .git directory contains, among other
 788things, a compressed object database representing the complete history
 789of the project, an "index" file which links that history to the current
 790contents of the working tree, and named pointers into that history such
 791as tags and branch heads.
 792
 793The object database contains objects of three main types: blobs, which
 794hold file data; trees, which point to blobs and other trees to build up
 795directory hierarchies; and commits, which each reference a single tree
 796and some number of parent commits.
 797
 798The commit, equivalent to what other systems call a "changeset" or
 799"version", represents a step in the project's history, and each parent
 800represents an immediately preceding step.  Commits with more than one
 801parent represent merges of independent lines of development.
 802
 803All objects are named by the SHA1 hash of their contents, normally
 804written as a string of 40 hex digits.  Such names are globally unique.
 805The entire history leading up to a commit can be vouched for by signing
 806just that commit.  A fourth object type, the tag, is provided for this
 807purpose.
 808
 809When first created, objects are stored in individual files, but for
 810efficiency may later be compressed together into "pack files".
 811
 812Named pointers called refs mark interesting points in history.  A ref
 813may contain the SHA1 name of an object or the name of another ref.  Refs
 814with names beginning `ref/head/` contain the SHA1 name of the most
 815recent commit (or "head") of a branch under development.  SHA1 names of
 816tags of interest are stored under `ref/tags/`.  A special ref named
 817`HEAD` contains the name of the currently checked-out branch.
 818
 819The index file is initialized with a list of all paths and, for each
 820path, a blob object and a set of attributes.  The blob object represents
 821the contents of the file as of the head of the current branch.  The
 822attributes (last modified time, size, etc.) are taken from the
 823corresponding file in the working tree.  Subsequent changes to the
 824working tree can be found by comparing these attributes.  The index may
 825be updated with new content, and new commits may be created from the
 826content stored in the index.
 827
 828The index is also capable of storing multiple entries (called "stages")
 829for a given pathname.  These stages are used to hold the various
 830unmerged version of a file when a merge is in progress.
 831
 832Authors
 833-------
 834Git was started by Linus Torvalds, and is currently maintained by Junio
 835C Hamano. Numerous contributions have come from the git mailing list
 836<git@vger.kernel.org>. For a more complete list of contributors, see
 837http://git-scm.com/about. If you have a clone of git.git itself, the
 838output of linkgit:git-shortlog[1] and linkgit:git-blame[1] can show you
 839the authors for specific parts of the project.
 840
 841Reporting Bugs
 842--------------
 843
 844Report bugs to the Git mailing list <git@vger.kernel.org> where the
 845development and maintenance is primarily done.  You do not have to be
 846subscribed to the list to send a message there.
 847
 848SEE ALSO
 849--------
 850linkgit:gittutorial[7], linkgit:gittutorial-2[7],
 851link:everyday.html[Everyday Git], linkgit:gitcvs-migration[7],
 852linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
 853linkgit:gitcli[7], link:user-manual.html[The Git User's Manual],
 854linkgit:gitworkflows[7]
 855
 856GIT
 857---
 858Part of the linkgit:git[1] suite