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