7d3b09fd28790dc9a3a164d91e54cf17aa1470f3
   1This file contains reference information for the core git commands.
   2
   3The README contains much useful definition and clarification
   4info - read that first.  And of the commands, I suggest reading
   5'git-update-cache' and 'git-read-tree' first - I wish I had!
   6
   7David Greaves <david@dgreaves.com>
   824/4/05
   9
  10Updated by Junio C Hamano <junkio@cox.net> on 2005-05-05 to
  11reflect recent changes.
  12
  13Identifier terminology used:
  14
  15<object>
  16        Indicates any object sha1 identifier
  17
  18<blob>
  19        Indicates a blob object sha1 identifier
  20
  21<tree>
  22        Indicates a tree object sha1 identifier
  23
  24<commit>
  25        Indicates a commit object sha1 identifier
  26
  27<tree-ish>
  28        Indicates a tree, commit or tag object sha1 identifier.
  29        A command that takes a <tree-ish> argument ultimately
  30        wants to operate on a <tree> object but automatically
  31        dereferences <commit> and <tag> that points at a
  32        <tree>.
  33
  34<type>
  35        Indicates that an object type is required.
  36        Currently one of: blob/tree/commit/tag
  37
  38<file>
  39        Indicates a filename - always relative to the root of
  40        the tree structure GIT_INDEX_FILE describes.
  41
  42
  43################################################################
  44git-apply-patch-script
  45
  46This is a sample script to be used as GIT_EXTERNAL_DIFF to apply
  47differences git-diff-* family of commands reports to the current
  48work tree.
  49
  50
  51################################################################
  52git-cat-file
  53        git-cat-file (-t | <type>) <object>
  54
  55Provides contents or type of objects in the repository. The type
  56is required if -t is not being used to find the object type.
  57
  58<object>
  59        The sha1 identifier of the object.
  60
  61-t
  62        Instead of the content, show the object type identified
  63        by <object>.
  64
  65<type>
  66        Typically this matches the real type of <object> but
  67        asking for type that can trivially dereferenced from the
  68        given <object> is also permitted.  An example is to ask
  69        "tree" with <object> for a commit object that contains
  70        it, or to ask "blob" with <object> for a tag object that
  71        points at it.
  72
  73Output
  74
  75If -t is specified, one of the <type>.
  76
  77Otherwise the raw (though uncompressed) contents of the <object> will
  78be returned.
  79
  80
  81################################################################
  82git-check-files
  83        git-check-files <file>...
  84
  85Check that a list of files are up-to-date between the filesystem and
  86the cache. Used to verify a patch target before doing a patch.
  87
  88Files that do not exist on the filesystem are considered up-to-date
  89(whether or not they are in the cache).
  90
  91Emits an error message on failure.
  92preparing to update existing file <file> not in cache
  93          <file> exists but is not in the cache
  94
  95preparing to update file <file> not uptodate in cache
  96          <file> on disk is not up-to-date with the cache
  97
  98Exits with a status code indicating success if all files are
  99up-to-date.
 100
 101see also: git-update-cache
 102
 103
 104################################################################
 105git-checkout-cache
 106        git-checkout-cache [-q] [-a] [-f] [-n] [--prefix=<string>]
 107                           [--] <file>...
 108
 109Will copy all files listed from the cache to the working directory
 110(not overwriting existing files).
 111
 112-q
 113        be quiet if files exist or are not in the cache
 114
 115-f
 116        forces overwrite of existing files
 117
 118-a
 119        checks out all files in the cache (will then continue to
 120        process listed files).
 121
 122-n
 123        Don't checkout new files, only refresh files already checked
 124        out.
 125
 126--prefix=<string>
 127        When creating files, prepend <string> (usually a directory
 128        including a trailing /)
 129
 130--
 131        Do not interpret any more arguments as options.
 132
 133Note that the order of the flags matters:
 134
 135        git-checkout-cache -a -f file.c
 136
 137will first check out all files listed in the cache (but not overwrite
 138any old ones), and then force-checkout file.c a second time (ie that
 139one _will_ overwrite any old contents with the same filename).
 140
 141Also, just doing "git-checkout-cache" does nothing. You probably meant
 142"git-checkout-cache -a". And if you want to force it, you want
 143"git-checkout-cache -f -a".
 144
 145Intuitiveness is not the goal here. Repeatability is. The reason for
 146the "no arguments means no work" thing is that from scripts you are
 147supposed to be able to do things like
 148
 149        find . -name '*.h' -print0 | xargs -0 git-checkout-cache -f --
 150
 151which will force all existing *.h files to be replaced with their
 152cached copies. If an empty command line implied "all", then this would
 153force-refresh everything in the cache, which was not the point.
 154
 155To update and refresh only the files already checked out:
 156
 157   git-checkout-cache -n -f -a && git-update-cache --ignore-missing --refresh
 158
 159Oh, and the "--" is just a good idea when you know the rest will be
 160filenames. Just so that you wouldn't have a filename of "-a" causing
 161problems (not possible in the above example, but get used to it in
 162scripting!).
 163
 164The prefix ability basically makes it trivial to use
 165git-checkout-cache as an "export as tree" function. Just read the
 166desired tree into the index, and do a
 167  
 168        git-checkout-cache --prefix=git-export-dir/ -a
 169  
 170and git-checkout-cache will "export" the cache into the specified
 171directory.
 172  
 173NOTE! The final "/" is important. The exported name is literally just
 174prefixed with the specified string, so you can also do something like
 175  
 176        git-checkout-cache --prefix=.merged- Makefile
 177  
 178to check out the currently cached copy of "Makefile" into the file
 179".merged-Makefile".
 180
 181
 182################################################################
 183git-commit-tree
 184        git-commit-tree <tree> [-p <parent commit>]*   < changelog
 185
 186Creates a new commit object based on the provided tree object and
 187emits the new commit object id on stdout. If no parent is given then
 188it is considered to be an initial tree.
 189
 190A commit object usually has 1 parent (a commit after a change) or up
 191to 16 parents.  More than one parent represents a merge of branches
 192that led to them.
 193
 194While a tree represents a particular directory state of a working
 195directory, a commit represents that state in "time", and explains how
 196to get there.
 197
 198Normally a commit would identify a new "HEAD" state, and while git
 199doesn't care where you save the note about that state, in practice we
 200tend to just write the result to the file ".git/HEAD", so that we can
 201always see what the last committed state was.
 202
 203Options
 204
 205<tree>
 206        An existing tree object
 207
 208-p <parent commit>
 209        Each -p indicates a the id of a parent commit object.
 210        
 211
 212Commit Information
 213
 214A commit encapsulates:
 215        all parent object ids
 216        author name, email and date
 217        committer name and email and the commit time.
 218
 219If not provided, git-commit-tree uses your name, hostname and domain to
 220provide author and committer info. This can be overridden using the
 221following environment variables.
 222        AUTHOR_NAME
 223        AUTHOR_EMAIL
 224        AUTHOR_DATE
 225        COMMIT_AUTHOR_NAME
 226        COMMIT_AUTHOR_EMAIL
 227(nb <,> and '\n's are stripped)
 228
 229A commit comment is read from stdin (max 999 chars). If a changelog
 230entry is not provided via '<' redirection, git-commit-tree will just wait
 231for one to be entered and terminated with ^D
 232
 233see also: git-write-tree
 234
 235
 236################################################################
 237git-convert-cache
 238
 239Converts old-style GIT repository to the latest.
 240
 241
 242################################################################
 243git-diff-cache
 244        git-diff-cache [-p] [-r] [-z] [-m] [--cached] <tree-ish>
 245
 246Compares the content and mode of the blobs found via a tree object
 247with the content of the current cache and, optionally ignoring the
 248stat state of the file on disk.
 249
 250<tree-ish>
 251        The id of a tree object to diff against.
 252
 253-p
 254        Generate patch (see section on generating patches)
 255
 256-r
 257        This flag does not mean anything.  It is there only to match
 258        git-diff-tree.  Unlike git-diff-tree, git-diff-cache always looks
 259        at all the subdirectories.
 260
 261-z
 262        \0 line termination on output
 263
 264--cached
 265        do not consider the on-disk file at all
 266
 267-m
 268
 269        By default, files recorded in the index but not checked
 270        out are reported as deleted.  This flag makes
 271        git-diff-cache say that all non-checked-out files are up
 272        to date.
 273
 274Output format:
 275
 276See "Output format from git-diff-cache, git-diff-tree and git-diff-files"
 277section.
 278
 279Operating Modes
 280
 281You can choose whether you want to trust the index file entirely
 282(using the "--cached" flag) or ask the diff logic to show any files
 283that don't match the stat state as being "tentatively changed".  Both
 284of these operations are very useful indeed.
 285
 286Cached Mode
 287
 288If --cached is specified, it allows you to ask:
 289
 290        show me the differences between HEAD and the current index
 291        contents (the ones I'd write with a "git-write-tree")
 292
 293For example, let's say that you have worked on your index file, and are
 294ready to commit. You want to see eactly _what_ you are going to commit is
 295without having to write a new tree object and compare it that way, and to
 296do that, you just do
 297
 298        git-diff-cache --cached $(cat .git/HEAD)
 299
 300Example: let's say I had renamed "commit.c" to "git-commit.c", and I had
 301done an "git-update-cache" to make that effective in the index file.
 302"git-diff-files" wouldn't show anything at all, since the index file
 303matches my working directory. But doing a git-diff-cache does:
 304
 305  torvalds@ppc970:~/git> git-diff-cache --cached $(cat .git/HEAD)
 306  -100644 blob    4161aecc6700a2eb579e842af0b7f22b98443f74        commit.c
 307  +100644 blob    4161aecc6700a2eb579e842af0b7f22b98443f74        git-commit.c
 308
 309You can trivially see that the above is a rename.
 310
 311In fact, "git-diff-cache --cached" _should_ always be entirely equivalent to
 312actually doing a "git-write-tree" and comparing that. Except this one is much
 313nicer for the case where you just want to check where you are.
 314
 315So doing a "git-diff-cache --cached" is basically very useful when you are 
 316asking yourself "what have I already marked for being committed, and 
 317what's the difference to a previous tree".
 318
 319Non-cached Mode
 320
 321The "non-cached" mode takes a different approach, and is potentially the
 322even more useful of the two in that what it does can't be emulated with a
 323"git-write-tree + git-diff-tree". Thus that's the default mode.  The
 324non-cached version asks the question
 325
 326   "show me the differences between HEAD and the currently checked out 
 327    tree - index contents _and_ files that aren't up-to-date"
 328
 329which is obviously a very useful question too, since that tells you what
 330you _could_ commit. Again, the output matches the "git-diff-tree -r"
 331output to a tee, but with a twist.
 332
 333The twist is that if some file doesn't match the cache, we don't have a
 334backing store thing for it, and we use the magic "all-zero" sha1 to show
 335that. So let's say that you have edited "kernel/sched.c", but have not
 336actually done an git-update-cache on it yet - there is no "object" associated
 337with the new state, and you get:
 338
 339  torvalds@ppc970:~/v2.6/linux> git-diff-cache $(cat .git/HEAD )
 340  *100644->100664 blob    7476bb......->000000......      kernel/sched.c
 341
 342ie it shows that the tree has changed, and that "kernel/sched.c" has is
 343not up-to-date and may contain new stuff. The all-zero sha1 means that to
 344get the real diff, you need to look at the object in the working directory
 345directly rather than do an object-to-object diff.
 346
 347NOTE! As with other commands of this type, "git-diff-cache" does not
 348actually look at the contents of the file at all. So maybe
 349"kernel/sched.c" hasn't actually changed, and it's just that you touched
 350it. In either case, it's a note that you need to upate-cache it to make
 351the cache be in sync.
 352
 353NOTE 2! You can have a mixture of files show up as "has been updated" and
 354"is still dirty in the working directory" together. You can always tell
 355which file is in which state, since the "has been updated" ones show a
 356valid sha1, and the "not in sync with the index" ones will always have the
 357special all-zero sha1.
 358
 359
 360################################################################
 361git-diff-files
 362        git-diff-files [-p] [-q] [-r] [-z] [<pattern>...]
 363
 364Compares the files in the working tree and the cache.  When paths
 365are specified, compares only those named paths.  Otherwise all
 366entries in the cache are compared.  The output format is the
 367same as git-diff-cache and git-diff-tree.
 368
 369-p
 370        generate patch (see section on generating patches).
 371
 372-q
 373        Remain silent even on nonexisting files
 374
 375-r
 376        This flag does not mean anything.  It is there only to match
 377        git-diff-tree.  Unlike git-diff-tree, git-diff-files always looks
 378        at all the subdirectories.
 379
 380
 381Output format:
 382
 383See "Output format from git-diff-cache, git-diff-tree and git-diff-files"
 384section.
 385
 386
 387################################################################
 388git-diff-tree
 389        git-diff-tree [-p] [-r] [-z] [--stdin] [-m] [-s] [-v] <tree-ish> <tree-ish> [<pattern>]*
 390
 391Compares the content and mode of the blobs found via two tree objects.
 392
 393Note that git-diff-tree can use the tree encapsulated in a commit object.
 394
 395<tree-ish>
 396        The id of a tree object.
 397
 398<pattern>
 399        If provided, the results are limited to a subset of files
 400        matching one of these prefix strings.
 401        ie file matches /^<pattern1>|<pattern2>|.../
 402        Note that pattern does not provide any wildcard or regexp
 403        features.
 404
 405-p
 406        generate patch (see section on generating patches).  For
 407        git-diff-tree, this flag implies -r as well.
 408
 409-r
 410        recurse
 411
 412-z
 413        \0 line termination on output
 414
 415--stdin
 416        When --stdin is specified, the command does not take
 417        <tree-ish> arguments from the command line.  Instead, it
 418        reads either one <commit> or a pair of <tree-ish>
 419        separated with a single space from its standard input.
 420
 421        When a single commit is given on one line of such input,
 422        it compares the commit with its parents.  The following
 423        flags further affects its behaviour.  This does not
 424        apply to the case where two <tree-ish> separated with a
 425        single space are given.
 426
 427-m
 428        By default, "git-diff-tree --stdin" does not show
 429        differences for merge commits.  With this flag, it shows
 430        differences to that commit from all of its parents.
 431
 432-s
 433        By default, "git-diff-tree --stdin" shows differences,
 434        either in machine-readable form (without -p) or in patch
 435        form (with -p).  This output can be supressed.  It is
 436        only useful with -v flag.
 437
 438-v
 439        This flag causes "git-diff-tree --stdin" to also show
 440        the commit message before the differences.
 441
 442
 443Limiting Output
 444
 445If you're only interested in differences in a subset of files, for
 446example some architecture-specific files, you might do:
 447
 448        git-diff-tree -r <tree-ish> <tree-ish> arch/ia64 include/asm-ia64
 449
 450and it will only show you what changed in those two directories.
 451
 452Or if you are searching for what changed in just kernel/sched.c, just do
 453
 454        git-diff-tree -r <tree-ish> <tree-ish> kernel/sched.c
 455
 456and it will ignore all differences to other files.
 457
 458The pattern is always the prefix, and is matched exactly.  There are no
 459wildcards.  Even stricter, it has to match complete path comonent.
 460I.e. "foo" does not pick up "foobar.h".  "foo" does match "foo/bar.h"
 461so it can be used to name subdirectories.
 462
 463Output format:
 464
 465See "Output format from git-diff-cache, git-diff-tree and git-diff-files"
 466section.
 467
 468An example of normal usage is:
 469
 470  torvalds@ppc970:~/git> git-diff-tree 5319e4......
 471  *100664->100664 blob    ac348b.......->a01513.......      git-fsck-cache.c
 472
 473which tells you that the last commit changed just one file (it's from
 474this one:
 475
 476  commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8
 477  tree 5319e4d609cdd282069cc4dce33c1db559539b03
 478  parent b4e628ea30d5ab3606119d2ea5caeab141d38df7
 479  author Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
 480  committer Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
 481
 482  Make "git-fsck-cache" print out all the root commits it finds.
 483
 484  Once I do the reference tracking, I'll also make it print out all the
 485  HEAD commits it finds, which is even more interesting.
 486
 487in case you care).
 488
 489
 490################################################################
 491git-diff-tree-helper
 492        git-diff-tree-helper [-z] [-R]
 493
 494Reads output from git-diff-cache, git-diff-tree and git-diff-files and
 495generates patch format output.
 496
 497-z
 498        \0 line termination on input
 499
 500-R
 501        Output diff in reverse.  This is useful for displaying output from
 502        git-diff-cache which always compares tree with cache or working
 503        file.  E.g.
 504
 505        git-diff-cache <tree> | git-diff-tree-helper -R file.c
 506
 507        would show a diff to bring the working file back to what is in the
 508        <tree>.
 509
 510See also the section on generating patches.
 511
 512
 513################################################################
 514git-export
 515        git-export top [base]
 516
 517Exports each commit and diff against each of its parents, between
 518top and base.  If base is not specified it exports everything.
 519
 520
 521################################################################
 522git-fsck-cache
 523        git-fsck-cache [--tags] [--root] [[--unreachable] [--cache] <object>*]
 524
 525Verifies the connectivity and validity of the objects in the database.
 526
 527<object>
 528        An object to treat as the head of an unreachability trace.
 529
 530--unreachable
 531        Print out objects that exist but that aren't readable from any
 532        of the specified head nodes.
 533
 534--root
 535        Report root nodes.
 536
 537--tags
 538        Report tags.
 539
 540--cache
 541        Consider any object recorded in the cache also as a head node for
 542        an unreachability trace.
 543
 544It tests SHA1 and general object sanity, and it does full tracking of
 545the resulting reachability and everything else. It prints out any
 546corruption it finds (missing or bad objects), and if you use the
 547"--unreachable" flag it will also print out objects that exist but
 548that aren't readable from any of the specified head nodes.
 549
 550So for example
 551
 552        git-fsck-cache --unreachable $(cat .git/HEAD)
 553
 554or, for Cogito users:
 555
 556        git-fsck-cache --unreachable $(cat .git/refs/heads/*)
 557
 558will do quite a _lot_ of verification on the tree. There are a few
 559extra validity tests to be added (make sure that tree objects are
 560sorted properly etc), but on the whole if "git-fsck-cache" is happy, you
 561do have a valid tree.
 562
 563Any corrupt objects you will have to find in backups or other archives
 564(ie you can just remove them and do an "rsync" with some other site in
 565the hopes that somebody else has the object you have corrupted).
 566
 567Of course, "valid tree" doesn't mean that it wasn't generated by some
 568evil person, and the end result might be crap. Git is a revision
 569tracking system, not a quality assurance system ;)
 570
 571Extracted Diagnostics
 572
 573expect dangling commits - potential heads - due to lack of head information
 574        You haven't specified any nodes as heads so it won't be
 575        possible to differentiate between un-parented commits and
 576        root nodes.
 577
 578missing sha1 directory '<dir>'
 579        The directory holding the sha1 objects is missing.
 580
 581unreachable <type> <object>
 582        The <type> object <object>, isn't actually referred to directly
 583        or indirectly in any of the trees or commits seen. This can
 584        mean that there's another root na SHA1_ode that you're not specifying
 585        or that the tree is corrupt. If you haven't missed a root node
 586        then you might as well delete unreachable nodes since they
 587        can't be used.
 588
 589missing <type> <object>
 590        The <type> object <object>, is referred to but isn't present in
 591        the database.
 592
 593dangling <type> <object>
 594        The <type> object <object>, is present in the database but never
 595        _directly_ used. A dangling commit could be a root node.
 596
 597warning: git-fsck-cache: tree <tree> has full pathnames in it
 598        And it shouldn't...
 599
 600sha1 mismatch <object>
 601        The database has an object who's sha1 doesn't match the
 602        database value.
 603        This indicates a ??serious?? data integrity problem.
 604        (note: this error occured during early git development when
 605        the database format changed.)
 606
 607Environment Variables
 608
 609SHA1_FILE_DIRECTORY
 610        used to specify the object database root (usually .git/objects)
 611
 612GIT_INDEX_FILE
 613        used to specify the cache
 614
 615
 616################################################################
 617git-http-pull
 618
 619        git-http-pull [-c] [-t] [-a] [-v] commit-id url
 620
 621Downloads a remote GIT repository via HTTP protocol.
 622
 623-c
 624        Get the commit objects.
 625-t
 626        Get trees associated with the commit objects.
 627-a
 628        Get all the objects.
 629-v
 630        Report what is downloaded.
 631
 632
 633################################################################
 634git-init-db
 635        git-init-db
 636
 637This simply creates an empty git object database - basically a .git
 638directory and .git/object/??/ directories.
 639
 640If the object storage directory is specified via the SHA1_FILE_DIRECTORY
 641environment variable then the sha1 directories are created underneath -
 642otherwise the default .git/objects directory is used.
 643
 644git-init-db won't hurt an existing repository.
 645
 646
 647################################################################
 648git-local-pull
 649
 650        git-local-pull [-c] [-t] [-a] [-l] [-s] [-n] [-v] commit-id path
 651
 652Downloads another GIT repository on a local system.
 653
 654-c
 655        Get the commit objects.
 656-t
 657        Get trees associated with the commit objects.
 658-a
 659        Get all the objects.
 660-v
 661        Report what is downloaded.
 662
 663################################################################
 664git-ls-files
 665        git-ls-files [-z] [-t]
 666                (--[cached|deleted|others|ignored|stage|unmerged])*
 667                (-[c|d|o|i|s|u])*
 668                [-x <pattern>|--exclude=<pattern>]
 669                [-X <file>|--exclude-from=<file>]
 670
 671This merges the file listing in the directory cache index with the
 672actual working directory list, and shows different combinations of the
 673two.
 674
 675One or more of the options below may be used to determine the files
 676shown:
 677
 678-c|--cached
 679        Show cached files in the output (default)
 680
 681-d|--deleted
 682        Show deleted files in the output
 683
 684-o|--others
 685        Show other files in the output
 686
 687-i|--ignored
 688        Show ignored files in the output
 689        Note the this also reverses any exclude list present.
 690
 691-s|--stage
 692        Show stage files in the output
 693
 694-u|--unmerged
 695        Show unmerged files in the output (forces --stage)
 696
 697-z
 698        \0 line termination on output
 699
 700-x|--exclude=<pattern>
 701        Skips files matching pattern.
 702        Note that pattern is a shell wildcard pattern.
 703
 704-X|--exclude-from=<file>
 705        exclude patterns are read from <file>; 1 per line.
 706        Allows the use of the famous dontdiff file as follows to find
 707        out about uncommitted files just as dontdiff is used with
 708        the diff command:
 709             git-ls-files --others --exclude-from=dontdiff
 710
 711-t
 712        Identify the file status with the following tags (followed by
 713        a space) at the start of each line:
 714        H       cached
 715        M       unmerged
 716        R       removed/deleted
 717        ?       other
 718
 719Output
 720show files just outputs the filename unless --stage is specified in
 721which case it outputs:
 722
 723[<tag> ]<mode> <object> <stage> <file>
 724
 725git-ls-files --unmerged" and "git-ls-files --stage " can be used to examine
 726detailed information on unmerged paths.
 727
 728For an unmerged path, instead of recording a single mode/SHA1 pair,
 729the dircache records up to three such pairs; one from tree O in stage
 7301, A in stage 2, and B in stage 3.  This information can be used by
 731the user (or Cogito) to see what should eventually be recorded at the
 732path. (see read-cache for more information on state)
 733
 734see also:
 735read-cache
 736
 737
 738################################################################
 739git-ls-tree
 740        git-ls-tree [-r] [-z] <tree-ish>
 741
 742Converts the tree object to a human readable (and script processable)
 743form.
 744
 745<tree-ish>
 746        Id of a tree.
 747
 748-r
 749        recurse into sub-trees
 750
 751-z
 752        \0 line termination on output
 753
 754Output Format
 755<mode>\t        <type>\t        <object>\t      <file>
 756
 757
 758################################################################
 759git-merge-base
 760        git-merge-base <commit> <commit>
 761
 762git-merge-base finds as good a common ancestor as possible. Given a
 763selection of equally good common ancestors it should not be relied on
 764to decide in any particular way.
 765
 766The git-merge-base algorithm is still in flux - use the source...
 767
 768
 769################################################################
 770git-merge-cache
 771        git-merge-cache <merge-program> (-a | -- | <file>*) 
 772
 773This looks up the <file>(s) in the cache and, if there are any merge
 774entries, passes the SHA1 hash for those files as arguments 1, 2, 3 (empty
 775argument if no file), and <file> as argument 4.  File modes for the three
 776files are passed as arguments 5, 6 and 7.
 777
 778--
 779        Interpret all future arguments as filenames.
 780
 781-a
 782        Run merge against all files in the cache that need merging.
 783
 784If git-merge-cache is called with multiple <file>s (or -a) then it
 785processes them in turn only stopping if merge returns a non-zero exit
 786code.
 787
 788Typically this is run with the a script calling the merge command from
 789the RCS package.
 790
 791A sample script called git-merge-one-file-script is included in the
 792ditribution.
 793
 794ALERT ALERT ALERT! The git "merge object order" is different from the
 795RCS "merge" program merge object order. In the above ordering, the
 796original is first. But the argument order to the 3-way merge program
 797"merge" is to have the original in the middle. Don't ask me why.
 798
 799Examples:
 800
 801  torvalds@ppc970:~/merge-test> git-merge-cache cat MM
 802  This is MM from the original tree.                    # original
 803  This is modified MM in the branch A.                  # merge1
 804  This is modified MM in the branch B.                  # merge2
 805  This is modified MM in the branch B.                  # current contents
 806
 807or 
 808
 809  torvalds@ppc970:~/merge-test> git-merge-cache cat AA MM
 810  cat: : No such file or directory
 811  This is added AA in the branch A.
 812  This is added AA in the branch B.
 813  This is added AA in the branch B.
 814  fatal: merge program failed
 815
 816where the latter example shows how "git-merge-cache" will stop trying to
 817merge once anything has returned an error (ie "cat" returned an error
 818for the AA file, because it didn't exist in the original, and thus
 819"git-merge-cache" didn't even try to merge the MM thing).
 820
 821################################################################
 822git-merge-one-file-script
 823
 824This is the standard helper program to use with git-merge-cache
 825to resolve a merge after the trivial merge done with git-read-tree -m.
 826
 827################################################################
 828git-mktag
 829
 830Reads a tag contents from its standard input and creates a tag object.
 831The input must be a well formed tag object.
 832
 833
 834################################################################
 835git-prune-script
 836
 837This runs git-fsck-cache --unreachable program using the heads specified
 838on the command line (or .git/refs/heads/* and .git/refs/tags/* if none is
 839specified), and prunes all unreachable objects from the object database.
 840
 841
 842################################################################
 843git-pull-script
 844
 845This script is used by Linus to pull from a remote repository and perform
 846a merge.
 847
 848
 849################################################################
 850git-read-tree
 851        git-read-tree (<tree-ish> | -m <tree-ish1> [<tree-ish2> <tree-ish3>])"
 852
 853Reads the tree information given by <tree> into the directory cache,
 854but does not actually _update_ any of the files it "caches". (see:
 855git-checkout-cache)
 856
 857Optionally, it can merge a tree into the cache or perform a 3-way
 858merge.
 859
 860Trivial merges are done by git-read-tree itself.  Only conflicting paths
 861will be in unmerged state when git-read-tree returns.
 862
 863-m
 864        Perform a merge, not just a read
 865
 866<tree-ish#>
 867        The id of the tree object(s) to be read/merged.
 868
 869
 870Merging
 871If -m is specified, git-read-tree performs 2 kinds of merge, a single tree
 872merge if only 1 tree is given or a 3-way merge if 3 trees are
 873provided.
 874
 875Single Tree Merge
 876If only 1 tree is specified, git-read-tree operates as if the user did not
 877specify "-m", except that if the original cache has an entry for a
 878given pathname; and the contents of the path matches with the tree
 879being read, the stat info from the cache is used. (In other words, the
 880cache's stat()s take precedence over the merged tree's)
 881
 882That means that if you do a "git-read-tree -m <newtree>" followed by a
 883"git-checkout-cache -f -a", the git-checkout-cache only checks out the stuff
 884that really changed.
 885
 886This is used to avoid unnecessary false hits when git-diff-files is
 887run after git-read-tree.
 888
 8893-Way Merge
 890Each "index" entry has two bits worth of "stage" state. stage 0 is the
 891normal one, and is the only one you'd see in any kind of normal use.
 892
 893However, when you do "git-read-tree" with three trees, the "stage"
 894starts out at 1.
 895
 896This means that you can do
 897
 898        git-read-tree -m <tree1> <tree2> <tree3>
 899
 900and you will end up with an index with all of the <tree1> entries in
 901"stage1", all of the <tree2> entries in "stage2" and all of the
 902<tree3> entries in "stage3".
 903
 904Furthermore, "git-read-tree" has special-case logic that says: if you see
 905a file that matches in all respects in the following states, it
 906"collapses" back to "stage0":
 907
 908   - stage 2 and 3 are the same; take one or the other (it makes no
 909     difference - the same work has been done on stage 2 and 3)
 910
 911   - stage 1 and stage 2 are the same and stage 3 is different; take
 912     stage 3 (some work has been done on stage 3)
 913
 914   - stage 1 and stage 3 are the same and stage 2 is different take
 915     stage 2 (some work has been done on stage 2)
 916
 917The git-write-tree command refuses to write a nonsensical tree, and it
 918will complain about unmerged entries if it sees a single entry that is not
 919stage 0.
 920
 921Ok, this all sounds like a collection of totally nonsensical rules,
 922but it's actually exactly what you want in order to do a fast
 923merge. The different stages represent the "result tree" (stage 0, aka
 924"merged"), the original tree (stage 1, aka "orig"), and the two trees
 925you are trying to merge (stage 2 and 3 respectively).
 926
 927In fact, the way "git-read-tree" works, it's entirely agnostic about how
 928you assign the stages, and you could really assign them any which way,
 929and the above is just a suggested way to do it (except since
 930"git-write-tree" refuses to write anything but stage0 entries, it makes
 931sense to always consider stage 0 to be the "full merge" state).
 932
 933So what happens? Try it out. Select the original tree, and two trees
 934to merge, and look how it works:
 935
 936 - if a file exists in identical format in all three trees, it will 
 937   automatically collapse to "merged" state by the new git-read-tree.
 938
 939 - a file that has _any_ difference what-so-ever in the three trees
 940   will stay as separate entries in the index. It's up to "script
 941   policy" to determine how to remove the non-0 stages, and insert a
 942   merged version.  But since the index is always sorted, they're easy
 943   to find: they'll be clustered together.
 944
 945 - the index file saves and restores with all this information, so you
 946   can merge things incrementally, but as long as it has entries in
 947   stages 1/2/3 (ie "unmerged entries") you can't write the result.
 948
 949So now the merge algorithm ends up being really simple:
 950
 951 - you walk the index in order, and ignore all entries of stage 0,
 952   since they've already been done.
 953
 954 - if you find a "stage1", but no matching "stage2" or "stage3", you
 955   know it's been removed from both trees (it only existed in the
 956   original tree), and you remove that entry.  - if you find a
 957   matching "stage2" and "stage3" tree, you remove one of them, and
 958   turn the other into a "stage0" entry. Remove any matching "stage1"
 959   entry if it exists too.  .. all the normal trivial rules ..
 960
 961Incidentally - it also means that you don't even have to have a separate
 962subdirectory for this. All the information literally is in the index file,
 963which is a temporary thing anyway. There is no need to worry about what is
 964in the working directory, since it is never shown and never used.
 965
 966see also:
 967git-write-tree
 968git-ls-files
 969
 970
 971################################################################
 972git-resolve-script
 973
 974This script is used by Linus to merge two trees.
 975
 976
 977################################################################
 978git-rev-list <commit>
 979
 980Lists commit objects in reverse chronological order starting at the
 981given commit, taking ancestry relationship into account.  This is
 982useful to produce human-readable log output.
 983
 984
 985################################################################
 986git-rev-tree
 987        git-rev-tree [--edges] [--cache <cache-file>] [^]<commit> [[^]<commit>]
 988
 989Provides the revision tree for one or more commits.
 990
 991--edges
 992        Show edges (ie places where the marking changes between parent
 993        and child)
 994
 995--cache <cache-file>
 996        Use the specified file as a cache from a previous git-rev-list run
 997        to speed things up.  Note that this "cache" is totally different
 998        concept from the directory index.  Also this option is not
 999        implemented yet.
1000
1001[^]<commit>
1002        The commit id to trace (a leading caret means to ignore this
1003        commit-id and below)
1004
1005Output:
1006<date> <commit>:<flags> [<parent-commit>:<flags> ]*
1007
1008<date>
1009        Date in 'seconds since epoch'
1010
1011<commit>
1012        id of commit object
1013
1014<parent-commit>
1015        id of each parent commit object (>1 indicates a merge)
1016
1017<flags>
1018
1019        The flags are read as a bitmask representing each commit
1020        provided on the commandline. eg: given the command:
1021
1022                 $ git-rev-tree <com1> <com2> <com3>
1023
1024        The output:
1025
1026            <date> <commit>:5
1027
1028         means that <commit> is reachable from <com1>(1) and <com3>(4)
1029        
1030A revtree can get quite large. git-rev-tree will eventually allow you to
1031cache previous state so that you don't have to follow the whole thing
1032down.
1033
1034So the change difference between two commits is literally
1035
1036        git-rev-tree [commit-id1]  > commit1-revtree
1037        git-rev-tree [commit-id2]  > commit2-revtree
1038        join -t : commit1-revtree commit2-revtree > common-revisions
1039
1040(this is also how to find the most common parent - you'd look at just
1041the head revisions - the ones that aren't referred to by other
1042revisions - in "common-revision", and figure out the best one. I
1043think.)
1044
1045
1046################################################################
1047git-rpull
1048
1049        git-rpull [-c] [-t] [-a] [-v] commit-id url
1050
1051Pulls from a remote repository over ssh connection, invoking git-rpush on
1052the other end.
1053
1054-c
1055        Get the commit objects.
1056-t
1057        Get trees associated with the commit objects.
1058-a
1059        Get all the objects.
1060-v
1061        Report what is downloaded.
1062
1063
1064################################################################
1065git-rpush
1066
1067Helper "server-side" program used by git-rpull.
1068
1069
1070################################################################
1071git-tag-script
1072
1073This is an example script that uses git-mktag to create a tag object
1074signed with GPG.
1075
1076
1077################################################################
1078git-tar-tree
1079
1080        git-tar-tree <tree-ish> [ <base> ]
1081
1082Creates a tar archive containing the tree structure for the named tree.
1083When <base> is specified it is added as a leading path as the files in the
1084generated tar archive.
1085
1086
1087################################################################
1088git-unpack-file
1089        git-unpack-file <blob>
1090
1091Creates a file holding the contents of the blob specified by sha1. It
1092returns the name of the temporary file in the following format:
1093        .merge_file_XXXXX
1094
1095<blob>
1096        Must be a blob id
1097
1098################################################################
1099git-update-cache
1100        git-update-cache
1101             [--add] [--remove] [--refresh] [--replace]
1102             [--ignore-missing]
1103             [--force-remove <file>]
1104             [--cacheinfo <mode> <object> <file>]*
1105             [--] [<file>]*
1106
1107Modifies the index or directory cache. Each file mentioned is updated
1108into the cache and any 'unmerged' or 'needs updating' state is
1109cleared.
1110
1111The way git-update-cache handles files it is told about can be modified
1112using the various options:
1113
1114--add
1115        If a specified file isn't in the cache already then it's
1116        added.
1117        Default behaviour is to ignore new files.
1118
1119--remove
1120        If a specified file is in the cache but is missing then it's
1121        removed.
1122        Default behaviour is to ignore removed file.
1123
1124--refresh
1125        Looks at the current cache and checks to see if merges or
1126        updates are needed by checking stat() information.
1127
1128--ignore-missing
1129        Ignores missing files during a --refresh
1130
1131--cacheinfo <mode> <object> <path>
1132        Directly insert the specified info into the cache.
1133        
1134--force-remove
1135        Remove the file from the index even when the working directory
1136        still has such a file.
1137
1138--replace
1139        By default, when a file "path" exists in the index,
1140        git-update-cache refuses an attempt to add "path/file".
1141        Similarly if a file "path/file" exists, a file "path"
1142        cannot be added.  With --replace flag, existing entries
1143        that conflicts with the entry being added are
1144        automatically removed with warning messages.
1145
1146--
1147        Do not interpret any more arguments as options.
1148
1149<file>
1150        Files to act on.
1151        Note that files begining with '.' are discarded. This includes
1152        "./file" and "dir/./file". If you don't want this, then use     
1153        cleaner names.
1154        The same applies to directories ending '/' and paths with '//'
1155
1156Using --refresh
1157--refresh does not calculate a new sha1 file or bring the cache
1158up-to-date for mode/content changes. But what it _does_ do is to
1159"re-match" the stat information of a file with the cache, so that you
1160can refresh the cache for a file that hasn't been changed but where
1161the stat entry is out of date.
1162
1163For example, you'd want to do this after doing a "git-read-tree", to link
1164up the stat cache details with the proper files.
1165
1166Using --cacheinfo
1167--cacheinfo is used to register a file that is not in the current
1168working directory.  This is useful for minimum-checkout merging.
1169
1170To pretend you have a file with mode and sha1 at path, say:
1171
1172 $ git-update-cache --cacheinfo mode sha1 path
1173
1174To update and refresh only the files already checked out:
1175
1176   git-checkout-cache -n -f -a && git-update-cache --ignore-missing --refresh
1177
1178
1179################################################################
1180git-write-blob
1181
1182        git-write-blob <any-file-on-the-filesystem>
1183
1184Writes the contents of the named file (which can be outside of the work
1185tree) as a blob into the object database, and reports its object ID to its
1186standard output.  This is used by git-merge-one-file-script to update the
1187cache without modifying files in the work tree.
1188
1189
1190################################################################
1191git-write-tree
1192        git-write-tree
1193
1194Creates a tree object using the current cache.
1195
1196The cache must be merged.
1197
1198Conceptually, git-write-tree sync()s the current directory cache contents
1199into a set of tree files.
1200In order to have that match what is actually in your directory right
1201now, you need to have done a "git-update-cache" phase before you did the
1202"git-write-tree".
1203
1204
1205################################################################
1206
1207Output format from git-diff-cache, git-diff-tree and git-diff-files.
1208
1209These commands all compare two sets of things; what are
1210compared are different:
1211
1212    git-diff-cache <tree-ish>
1213
1214        compares the <tree-ish> and the files on the filesystem.
1215
1216    git-diff-cache --cached <tree-ish>
1217
1218        compares the <tree-ish> and the cache.
1219
1220    git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>...]
1221
1222        compares the trees named by the two arguments.
1223
1224    git-diff-files [<pattern>...]
1225
1226        compares the cache and the files on the filesystem.
1227
1228The following desription uses "old" and "new" to mean those
1229compared entities.
1230
1231For files in old but not in new (i.e. removed):
1232-<mode> \t <type> \t <object> \t <path>
1233
1234For files not in old but in new (i.e. added):
1235+<mode> \t <type> \t <object> \t <path>
1236
1237For files that differ:
1238*<old-mode>-><new-mode> \t <type> \t <old-sha1>-><new-sha1> \t <path>
1239
1240<new-sha1> is shown as all 0's if new is a file on the
1241filesystem and it is out of sync with the cache.  Example:
1242
1243  *100644->100644 blob    5be4a4.......->000000.......      file.c
1244
1245################################################################
1246
1247Generating patches
1248
1249When git-diff-cache, git-diff-tree, or git-diff-files are run with a -p
1250option, they do not produce the output described in "Output format from
1251git-diff-cache, git-diff-tree and git-diff-files" section.  It instead
1252produces a patch file.
1253
1254The patch generation can be customized at two levels.  This
1255customization also applies to git-diff-tree-helper.
1256
12571. When the environment variable GIT_EXTERNAL_DIFF is not set,
1258   these commands internally invoke diff like this:
1259
1260   diff -L a/<path> -L a/<path> -pu <old> <new>
1261
1262   For added files, /dev/null is used for <old>.  For removed
1263   files, /dev/null is used for <new>
1264
1265   The diff formatting options can be customized via the
1266   environment variable GIT_DIFF_OPTS.  For example, if you
1267   prefer context diff:
1268
1269   GIT_DIFF_OPTS=-c git-diff-cache -p $(cat .git/HEAD)
1270
1271
12722. When the environment variable GIT_EXTERNAL_DIFF is set, the
1273   program named by it is called, instead of the diff invocation
1274   described above.
1275
1276   For a path that is added, removed, or modified,
1277   GIT_EXTERNAL_DIFF is called with 7 parameters:
1278
1279     path old-file old-hex old-mode new-file new-hex new-mode
1280
1281   where
1282     <old|new>-file are files GIT_EXTERNAL_DIFF can use to read the
1283                    contents of <old|ne>,
1284     <old|new>-hex are the 40-hexdigit SHA1 hashes,
1285     <old|new>-mode are the octal representation of the file modes.
1286
1287   The file parameters can point at the user's working file (e.g. new-file
1288   in git-diff-files), /dev/null (e.g. old-file when a new file is added),
1289   or a temporary file (e.g. old-file in the cache).  GIT_EXTERNAL_DIFF
1290   should not worry about unlinking the temporary file --- it is removed
1291   when GIT_EXTERNAL_DIFF exits.
1292
1293   For a path that is unmerged, GIT_EXTERNAL_DIFF is called with
1294   1 parameter, path.
1295
1296################################################################
1297
1298Terminology: - see README for description
1299Each line contains terms used interchangeably
1300
1301object database, .git directory
1302directory cache, index
1303id, sha1, sha1-id, sha1 hash
1304type, tag
1305blob, blob object
1306tree, tree object
1307commit, commit object
1308parent
1309root object
1310changeset
1311
1312
1313git Environment Variables
1314AUTHOR_NAME
1315AUTHOR_EMAIL
1316AUTHOR_DATE
1317COMMIT_AUTHOR_NAME
1318COMMIT_AUTHOR_EMAIL
1319GIT_DIFF_OPTS
1320GIT_EXTERNAL_DIFF
1321GIT_INDEX_FILE
1322SHA1_FILE_DIRECTORY