Documentation / git.txton commit optimize verify-pack a bit (9909323)
   1git(1)
   2======
   3
   4NAME
   5----
   6git - the stupid content tracker
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git' [--version] [--exec-path[=GIT_EXEC_PATH]]
  13    [-p|--paginate|--no-pager]
  14    [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
  15    [--help] COMMAND [ARGS]
  16
  17DESCRIPTION
  18-----------
  19Git is a fast, scalable, distributed revision control system with an
  20unusually rich command set that provides both high-level operations
  21and full access to internals.
  22
  23See this linkgit:gittutorial[7][tutorial] to get started, then see
  24link:everyday.html[Everyday Git] for a useful minimum set of commands, and
  25"man git-commandname" for documentation of each command.  CVS users may
  26also want to read linkgit:gitcvs-migration[7][CVS migration].  See
  27link:user-manual.html[Git User's Manual] for a more in-depth
  28introduction.
  29
  30The COMMAND is either a name of a Git command (see below) or an alias
  31as defined in the configuration file (see linkgit:git-config[1]).
  32
  33Formatted and hyperlinked version of the latest git
  34documentation can be viewed at
  35`http://www.kernel.org/pub/software/scm/git/docs/`.
  36
  37ifdef::stalenotes[]
  38[NOTE]
  39============
  40
  41You are reading the documentation for the latest (possibly
  42unreleased) version of git, that is available from 'master'
  43branch of the `git.git` repository.
  44Documentation for older releases are available here:
  45
  46* link:v1.5.6/git.html[documentation for release 1.5.6]
  47
  48* release notes for
  49  link:RelNotes-1.5.6.txt[1.5.6],
  50
  51* link:v1.5.5/git.html[documentation for release 1.5.5]
  52
  53* release notes for
  54  link:RelNotes-1.5.5.4.txt[1.5.5.4],
  55  link:RelNotes-1.5.5.3.txt[1.5.5.3],
  56  link:RelNotes-1.5.5.2.txt[1.5.5.2],
  57  link:RelNotes-1.5.5.1.txt[1.5.5.1],
  58  link:RelNotes-1.5.5.txt[1.5.5].
  59
  60* link:v1.5.5.4/git.html[documentation for release 1.5.5.4]
  61
  62* link:v1.5.4.5/git.html[documentation for release 1.5.4.5]
  63
  64* release notes for
  65  link:RelNotes-1.5.4.5.txt[1.5.4.5],
  66  link:RelNotes-1.5.4.4.txt[1.5.4.4],
  67  link:RelNotes-1.5.4.3.txt[1.5.4.3],
  68  link:RelNotes-1.5.4.2.txt[1.5.4.2],
  69  link:RelNotes-1.5.4.1.txt[1.5.4.1],
  70  link:RelNotes-1.5.4.txt[1.5.4].
  71
  72* link:v1.5.3.8/git.html[documentation for release 1.5.3.8]
  73
  74* release notes for
  75  link:RelNotes-1.5.3.8.txt[1.5.3.8],
  76  link:RelNotes-1.5.3.7.txt[1.5.3.7],
  77  link:RelNotes-1.5.3.6.txt[1.5.3.6],
  78  link:RelNotes-1.5.3.5.txt[1.5.3.5],
  79  link:RelNotes-1.5.3.4.txt[1.5.3.4],
  80  link:RelNotes-1.5.3.3.txt[1.5.3.3],
  81  link:RelNotes-1.5.3.2.txt[1.5.3.2],
  82  link:RelNotes-1.5.3.1.txt[1.5.3.1],
  83  link:RelNotes-1.5.3.txt[1.5.3].
  84
  85* release notes for
  86  link:RelNotes-1.5.2.5.txt[1.5.2.5],
  87  link:RelNotes-1.5.2.4.txt[1.5.2.4],
  88  link:RelNotes-1.5.2.3.txt[1.5.2.3],
  89  link:RelNotes-1.5.2.2.txt[1.5.2.2],
  90  link:RelNotes-1.5.2.1.txt[1.5.2.1],
  91  link:RelNotes-1.5.2.txt[1.5.2].
  92
  93* link:v1.5.1.6/git.html[documentation for release 1.5.1.6]
  94
  95* release notes for
  96  link:RelNotes-1.5.1.6.txt[1.5.1.6],
  97  link:RelNotes-1.5.1.5.txt[1.5.1.5],
  98  link:RelNotes-1.5.1.4.txt[1.5.1.4],
  99  link:RelNotes-1.5.1.3.txt[1.5.1.3],
 100  link:RelNotes-1.5.1.2.txt[1.5.1.2],
 101  link:RelNotes-1.5.1.1.txt[1.5.1.1],
 102  link:RelNotes-1.5.1.txt[1.5.1].
 103
 104* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]
 105
 106* release notes for
 107  link:RelNotes-1.5.0.7.txt[1.5.0.7],
 108  link:RelNotes-1.5.0.6.txt[1.5.0.6],
 109  link:RelNotes-1.5.0.5.txt[1.5.0.5],
 110  link:RelNotes-1.5.0.3.txt[1.5.0.3],
 111  link:RelNotes-1.5.0.2.txt[1.5.0.2],
 112  link:RelNotes-1.5.0.1.txt[1.5.0.1],
 113  link:RelNotes-1.5.0.txt[1.5.0].
 114
 115* documentation for release link:v1.4.4.4/git.html[1.4.4.4],
 116  link:v1.3.3/git.html[1.3.3],
 117  link:v1.2.6/git.html[1.2.6],
 118  link:v1.0.13/git.html[1.0.13].
 119
 120============
 121
 122endif::stalenotes[]
 123
 124OPTIONS
 125-------
 126--version::
 127        Prints the git suite version that the 'git' program came from.
 128
 129--help::
 130        Prints the synopsis and a list of the most commonly used
 131        commands. If the option '--all' or '-a' is given then all
 132        available commands are printed. If a git command is named this
 133        option will bring up the manual page for that command.
 134+
 135Other options are available to control how the manual page is
 136displayed. See linkgit:git-help[1] for more information,
 137because 'git --help ...' is converted internally into 'git
 138help ...'.
 139
 140--exec-path::
 141        Path to wherever your core git programs are installed.
 142        This can also be controlled by setting the GIT_EXEC_PATH
 143        environment variable. If no path is given 'git' will print
 144        the current setting and then exit.
 145
 146-p::
 147--paginate::
 148        Pipe all output into 'less' (or if set, $PAGER).
 149
 150--no-pager::
 151        Do not pipe git output into a pager.
 152
 153--git-dir=<path>::
 154        Set the path to the repository. This can also be controlled by
 155        setting the GIT_DIR environment variable. It can be an absolute
 156        path or relative path to current working directory.
 157
 158--work-tree=<path>::
 159        Set the path to the working tree.  The value will not be
 160        used in combination with repositories found automatically in
 161        a .git directory (i.e. $GIT_DIR is not set).
 162        This can also be controlled by setting the GIT_WORK_TREE
 163        environment variable and the core.worktree configuration
 164        variable. It can be an absolute path or relative path to
 165        the directory specified by --git-dir or GIT_DIR.
 166        Note: If --git-dir or GIT_DIR are specified but none of
 167        --work-tree, GIT_WORK_TREE and core.worktree is specified,
 168        the current working directory is regarded as the top directory
 169        of your working tree.
 170
 171--bare::
 172        Treat the repository as a bare repository.  If GIT_DIR
 173        environment is not set, it is set to the current working
 174        directory.
 175
 176
 177FURTHER DOCUMENTATION
 178---------------------
 179
 180See the references above to get started using git.  The following is
 181probably more detail than necessary for a first-time user.
 182
 183The link:user-manual.html#git-concepts[git concepts chapter of the
 184user-manual] and the linkgit:gitcore-tutorial[7][Core tutorial] both provide
 185introductions to the underlying git architecture.
 186
 187See also the link:howto-index.html[howto] documents for some useful
 188examples.
 189
 190The internals are documented link:technical/api-index.html[here].
 191
 192GIT COMMANDS
 193------------
 194
 195We divide git into high level ("porcelain") commands and low level
 196("plumbing") commands.
 197
 198High-level commands (porcelain)
 199-------------------------------
 200
 201We separate the porcelain commands into the main commands and some
 202ancillary user utilities.
 203
 204Main porcelain commands
 205~~~~~~~~~~~~~~~~~~~~~~~
 206
 207include::cmds-mainporcelain.txt[]
 208
 209Ancillary Commands
 210~~~~~~~~~~~~~~~~~~
 211Manipulators:
 212
 213include::cmds-ancillarymanipulators.txt[]
 214
 215Interrogators:
 216
 217include::cmds-ancillaryinterrogators.txt[]
 218
 219
 220Interacting with Others
 221~~~~~~~~~~~~~~~~~~~~~~~
 222
 223These commands are to interact with foreign SCM and with other
 224people via patch over e-mail.
 225
 226include::cmds-foreignscminterface.txt[]
 227
 228
 229Low-level commands (plumbing)
 230-----------------------------
 231
 232Although git includes its
 233own porcelain layer, its low-level commands are sufficient to support
 234development of alternative porcelains.  Developers of such porcelains
 235might start by reading about linkgit:git-update-index[1] and
 236linkgit:git-read-tree[1].
 237
 238The interface (input, output, set of options and the semantics)
 239to these low-level commands are meant to be a lot more stable
 240than Porcelain level commands, because these commands are
 241primarily for scripted use.  The interface to Porcelain commands
 242on the other hand are subject to change in order to improve the
 243end user experience.
 244
 245The following description divides
 246the low-level commands into commands that manipulate objects (in
 247the repository, index, and working tree), commands that interrogate and
 248compare objects, and commands that move objects and references between
 249repositories.
 250
 251
 252Manipulation commands
 253~~~~~~~~~~~~~~~~~~~~~
 254
 255include::cmds-plumbingmanipulators.txt[]
 256
 257
 258Interrogation commands
 259~~~~~~~~~~~~~~~~~~~~~~
 260
 261include::cmds-plumbinginterrogators.txt[]
 262
 263In general, the interrogate commands do not touch the files in
 264the working tree.
 265
 266
 267Synching repositories
 268~~~~~~~~~~~~~~~~~~~~~
 269
 270include::cmds-synchingrepositories.txt[]
 271
 272The following are helper programs used by the above; end users
 273typically do not use them directly.
 274
 275include::cmds-synchelpers.txt[]
 276
 277
 278Internal helper commands
 279~~~~~~~~~~~~~~~~~~~~~~~~
 280
 281These are internal helper commands used by other commands; end
 282users typically do not use them directly.
 283
 284include::cmds-purehelpers.txt[]
 285
 286
 287Configuration Mechanism
 288-----------------------
 289
 290Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
 291is used to hold per-repository configuration options.  It is a
 292simple text file modeled after `.ini` format familiar to some
 293people.  Here is an example:
 294
 295------------
 296#
 297# A '#' or ';' character indicates a comment.
 298#
 299
 300; core variables
 301[core]
 302        ; Don't trust file modes
 303        filemode = false
 304
 305; user identity
 306[user]
 307        name = "Junio C Hamano"
 308        email = "junkio@twinsun.com"
 309
 310------------
 311
 312Various commands read from the configuration file and adjust
 313their operation accordingly.
 314
 315
 316Identifier Terminology
 317----------------------
 318<object>::
 319        Indicates the object name for any type of object.
 320
 321<blob>::
 322        Indicates a blob object name.
 323
 324<tree>::
 325        Indicates a tree object name.
 326
 327<commit>::
 328        Indicates a commit object name.
 329
 330<tree-ish>::
 331        Indicates a tree, commit or tag object name.  A
 332        command that takes a <tree-ish> argument ultimately wants to
 333        operate on a <tree> object but automatically dereferences
 334        <commit> and <tag> objects that point at a <tree>.
 335
 336<commit-ish>::
 337        Indicates a commit or tag object name.  A
 338        command that takes a <commit-ish> argument ultimately wants to
 339        operate on a <commit> object but automatically dereferences
 340        <tag> objects that point at a <commit>.
 341
 342<type>::
 343        Indicates that an object type is required.
 344        Currently one of: `blob`, `tree`, `commit`, or `tag`.
 345
 346<file>::
 347        Indicates a filename - almost always relative to the
 348        root of the tree structure `GIT_INDEX_FILE` describes.
 349
 350Symbolic Identifiers
 351--------------------
 352Any git command accepting any <object> can also use the following
 353symbolic notation:
 354
 355HEAD::
 356        indicates the head of the current branch (i.e. the
 357        contents of `$GIT_DIR/HEAD`).
 358
 359<tag>::
 360        a valid tag 'name'
 361        (i.e. the contents of `$GIT_DIR/refs/tags/<tag>`).
 362
 363<head>::
 364        a valid head 'name'
 365        (i.e. the contents of `$GIT_DIR/refs/heads/<head>`).
 366
 367For a more complete list of ways to spell object names, see
 368"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
 369
 370
 371File/Directory Structure
 372------------------------
 373
 374Please see the linkgit:gitrepository-layout[5][repository layout]
 375document.
 376
 377Read linkgit:githooks[5][hooks] for more details about each hook.
 378
 379Higher level SCMs may provide and manage additional information in the
 380`$GIT_DIR`.
 381
 382
 383Terminology
 384-----------
 385Please see the linkgit:gitglossary[7][glossary] document.
 386
 387
 388Environment Variables
 389---------------------
 390Various git commands use the following environment variables:
 391
 392The git Repository
 393~~~~~~~~~~~~~~~~~~
 394These environment variables apply to 'all' core git commands. Nb: it
 395is worth noting that they may be used/overridden by SCMS sitting above
 396git so take care if using Cogito etc.
 397
 398'GIT_INDEX_FILE'::
 399        This environment allows the specification of an alternate
 400        index file. If not specified, the default of `$GIT_DIR/index`
 401        is used.
 402
 403'GIT_OBJECT_DIRECTORY'::
 404        If the object storage directory is specified via this
 405        environment variable then the sha1 directories are created
 406        underneath - otherwise the default `$GIT_DIR/objects`
 407        directory is used.
 408
 409'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
 410        Due to the immutable nature of git objects, old objects can be
 411        archived into shared, read-only directories. This variable
 412        specifies a ":" separated list of git object directories which
 413        can be used to search for git objects. New objects will not be
 414        written to these directories.
 415
 416'GIT_DIR'::
 417        If the 'GIT_DIR' environment variable is set then it
 418        specifies a path to use instead of the default `.git`
 419        for the base of the repository.
 420
 421'GIT_WORK_TREE'::
 422        Set the path to the working tree.  The value will not be
 423        used in combination with repositories found automatically in
 424        a .git directory (i.e. $GIT_DIR is not set).
 425        This can also be controlled by the '--work-tree' command line
 426        option and the core.worktree configuration variable.
 427
 428git Commits
 429~~~~~~~~~~~
 430'GIT_AUTHOR_NAME'::
 431'GIT_AUTHOR_EMAIL'::
 432'GIT_AUTHOR_DATE'::
 433'GIT_COMMITTER_NAME'::
 434'GIT_COMMITTER_EMAIL'::
 435'GIT_COMMITTER_DATE'::
 436'EMAIL'::
 437        see linkgit:git-commit-tree[1]
 438
 439git Diffs
 440~~~~~~~~~
 441'GIT_DIFF_OPTS'::
 442        Only valid setting is "--unified=??" or "-u??" to set the
 443        number of context lines shown when a unified diff is created.
 444        This takes precedence over any "-U" or "--unified" option
 445        value passed on the git diff command line.
 446
 447'GIT_EXTERNAL_DIFF'::
 448        When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
 449        program named by it is called, instead of the diff invocation
 450        described above.  For a path that is added, removed, or modified,
 451        'GIT_EXTERNAL_DIFF' is called with 7 parameters:
 452
 453        path old-file old-hex old-mode new-file new-hex new-mode
 454+
 455where:
 456
 457        <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
 458                         contents of <old|new>,
 459        <old|new>-hex:: are the 40-hexdigit SHA1 hashes,
 460        <old|new>-mode:: are the octal representation of the file modes.
 461
 462+
 463The file parameters can point at the user's working file
 464(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
 465when a new file is added), or a temporary file (e.g. `old-file` in the
 466index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
 467temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
 468+
 469For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
 470parameter, <path>.
 471
 472other
 473~~~~~
 474'GIT_MERGE_VERBOSITY'::
 475        A number controlling the amount of output shown by
 476        the recursive merge strategy.  Overrides merge.verbosity.
 477        See linkgit:git-merge[1]
 478
 479'GIT_PAGER'::
 480        This environment variable overrides `$PAGER`. If it is set
 481        to an empty string or to the value "cat", git will not launch
 482        a pager.
 483
 484'GIT_SSH'::
 485        If this environment variable is set then linkgit:git-fetch[1]
 486        and linkgit:git-push[1] will use this command instead
 487        of `ssh` when they need to connect to a remote system.
 488        The 'GIT_SSH' command will be given exactly two arguments:
 489        the 'username@host' (or just 'host') from the URL and the
 490        shell command to execute on that remote system.
 491+
 492To pass options to the program that you want to list in GIT_SSH
 493you will need to wrap the program and options into a shell script,
 494then set GIT_SSH to refer to the shell script.
 495+
 496Usually it is easier to configure any desired options through your
 497personal `.ssh/config` file.  Please consult your ssh documentation
 498for further details.
 499
 500'GIT_FLUSH'::
 501        If this environment variable is set to "1", then commands such
 502        as git-blame (in incremental mode), git-rev-list, git-log,
 503        git-whatchanged, etc., will force a flush of the output stream
 504        after each commit-oriented record have been flushed.   If this
 505        variable is set to "0", the output of these commands will be done
 506        using completely buffered I/O.   If this environment variable is
 507        not set, git will choose buffered or record-oriented flushing
 508        based on whether stdout appears to be redirected to a file or not.
 509
 510'GIT_TRACE'::
 511        If this variable is set to "1", "2" or "true" (comparison
 512        is case insensitive), git will print `trace:` messages on
 513        stderr telling about alias expansion, built-in command
 514        execution and external command execution.
 515        If this variable is set to an integer value greater than 1
 516        and lower than 10 (strictly) then git will interpret this
 517        value as an open file descriptor and will try to write the
 518        trace messages into this file descriptor.
 519        Alternatively, if this variable is set to an absolute path
 520        (starting with a '/' character), git will interpret this
 521        as a file path and will try to write the trace messages
 522        into it.
 523
 524Discussion[[Discussion]]
 525------------------------
 526
 527More detail on the following is available from the
 528link:user-manual.html#git-concepts[git concepts chapter of the
 529user-manual] and the linkgit:gitcore-tutorial[7][Core tutorial].
 530
 531A git project normally consists of a working directory with a ".git"
 532subdirectory at the top level.  The .git directory contains, among other
 533things, a compressed object database representing the complete history
 534of the project, an "index" file which links that history to the current
 535contents of the working tree, and named pointers into that history such
 536as tags and branch heads.
 537
 538The object database contains objects of three main types: blobs, which
 539hold file data; trees, which point to blobs and other trees to build up
 540directory hierarchies; and commits, which each reference a single tree
 541and some number of parent commits.
 542
 543The commit, equivalent to what other systems call a "changeset" or
 544"version", represents a step in the project's history, and each parent
 545represents an immediately preceding step.  Commits with more than one
 546parent represent merges of independent lines of development.
 547
 548All objects are named by the SHA1 hash of their contents, normally
 549written as a string of 40 hex digits.  Such names are globally unique.
 550The entire history leading up to a commit can be vouched for by signing
 551just that commit.  A fourth object type, the tag, is provided for this
 552purpose.
 553
 554When first created, objects are stored in individual files, but for
 555efficiency may later be compressed together into "pack files".
 556
 557Named pointers called refs mark interesting points in history.  A ref
 558may contain the SHA1 name of an object or the name of another ref.  Refs
 559with names beginning `ref/head/` contain the SHA1 name of the most
 560recent commit (or "head") of a branch under development.  SHA1 names of
 561tags of interest are stored under `ref/tags/`.  A special ref named
 562`HEAD` contains the name of the currently checked-out branch.
 563
 564The index file is initialized with a list of all paths and, for each
 565path, a blob object and a set of attributes.  The blob object represents
 566the contents of the file as of the head of the current branch.  The
 567attributes (last modified time, size, etc.) are taken from the
 568corresponding file in the working tree.  Subsequent changes to the
 569working tree can be found by comparing these attributes.  The index may
 570be updated with new content, and new commits may be created from the
 571content stored in the index.
 572
 573The index is also capable of storing multiple entries (called "stages")
 574for a given pathname.  These stages are used to hold the various
 575unmerged version of a file when a merge is in progress.
 576
 577Authors
 578-------
 579* git's founding father is Linus Torvalds <torvalds@osdl.org>.
 580* The current git nurse is Junio C Hamano <gitster@pobox.com>.
 581* The git potty was written by Andreas Ericsson <ae@op5.se>.
 582* General upbringing is handled by the git-list <git@vger.kernel.org>.
 583
 584Documentation
 585--------------
 586The documentation for git suite was started by David Greaves
 587<david@dgreaves.com>, and later enhanced greatly by the
 588contributors on the git-list <git@vger.kernel.org>.
 589
 590SEE ALSO
 591--------
 592linkgit:gittutorial[7], linkgit:gittutorial-2[7],
 593linkgit:giteveryday[7], linkgit:gitcvs-migration[7],
 594linkgit:gitglossary[7], linkgit:gitcore-tutorial[7],
 595link:user-manual.html[The Git User's Manual]
 596
 597GIT
 598---
 599Part of the linkgit:git[1] suite