Skip to content
Snippets Groups Projects
config.txt 135 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
    CONFIGURATION FILE
    ------------------
    
    The Git configuration file contains a number of variables that affect
    the Git commands' behavior. The `.git/config` file in each repository
    is used to store the configuration for that repository, and
    `$HOME/.gitconfig` is used to store a per-user configuration as
    fallback values for the `.git/config` file. The file `/etc/gitconfig`
    can be used to store a system-wide default configuration.
    
    The configuration variables are used by both the Git plumbing
    and the porcelains. The variables are divided into sections, wherein
    the fully qualified variable name of the variable itself is the last
    dot-separated segment and the section name is everything before the last
    dot. The variable names are case-insensitive, allow only alphanumeric
    characters and `-`, and must start with an alphabetic character.  Some
    variables may appear multiple times; we say then that the variable is
    multivalued.
    
    Syntax
    ~~~~~~
    
    The syntax is fairly flexible and permissive; whitespaces are mostly
    ignored.  The '#' and ';' characters begin comments to the end of line,
    blank lines are ignored.
    
    The file consists of sections and variables.  A section begins with
    the name of the section in square brackets and continues until the next
    section begins.  Section names are case-insensitive.  Only alphanumeric
    characters, `-` and `.` are allowed in section names.  Each variable
    must belong to some section, which means that there must be a section
    header before the first setting of a variable.
    
    Sections can be further divided into subsections.  To begin a subsection
    put its name in double quotes, separated by space from the section name,
    in the section header, like in the example below:
    
    --------
    	[section "subsection"]
    
    --------
    
    Subsection names are case sensitive and can contain any characters except
    newline (doublequote `"` and backslash can be included by escaping them
    as `\"` and `\\`, respectively).  Section headers cannot span multiple
    lines.  Variables may belong directly to a section or to a given subsection.
    You can have `[section]` if you have `[section "subsection"]`, but you
    don't need to.
    
    There is also a deprecated `[section.subsection]` syntax. With this
    syntax, the subsection name is converted to lower-case and is also
    compared case sensitively. These subsection names follow the same
    restrictions as section names.
    
    All the other lines (and the remainder of the line after the section
    header) are recognized as setting variables, in the form
    'name = value' (or just 'name', which is a short-hand to say that
    the variable is the boolean "true").
    The variable names are case-insensitive, allow only alphanumeric characters
    and `-`, and must start with an alphabetic character.
    
    A line that defines a value can be continued to the next line by
    ending it with a `\`; the backquote and the end-of-line are
    stripped.  Leading whitespaces after 'name =', the remainder of the
    line after the first comment character '#' or ';', and trailing
    whitespaces of the line are discarded unless they are enclosed in
    double quotes.  Internal whitespaces within the value are retained
    verbatim.
    
    Inside double quotes, double quote `"` and backslash `\` characters
    must be escaped: use `\"` for `"` and `\\` for `\`.
    
    The following escape sequences (beside `\"` and `\\`) are recognized:
    `\n` for newline character (NL), `\t` for horizontal tabulation (HT, TAB)
    and `\b` for backspace (BS).  Other char escape sequences (including octal
    escape sequences) are invalid.
    
    
    Includes
    ~~~~~~~~
    
    You can include a config file from another by setting the special
    `include.path` variable to the name of the file to be included. The
    variable takes a pathname as its value, and is subject to tilde
    expansion. `include.path` can be given multiple times.
    
    The included file is expanded immediately, as if its contents had been
    found at the location of the include directive. If the value of the
    `include.path` variable is a relative path, the path is considered to
    be relative to the configuration file in which the include directive
    was found.  See below for examples.
    
    Conditional includes
    ~~~~~~~~~~~~~~~~~~~~
    
    You can include a config file from another conditionally by setting a
    `includeIf.<condition>.path` variable to the name of the file to be
    included. The variable's value is treated the same way as
    `include.path`. `includeIf.<condition>.path` can be given multiple times.
    
    The condition starts with a keyword followed by a colon and some data
    whose format and meaning depends on the keyword. Supported keywords
    are:
    
    `gitdir`::
    
    	The data that follows the keyword `gitdir:` is used as a glob
    	pattern. If the location of the .git directory matches the
    	pattern, the include condition is met.
    +
    The .git location may be auto-discovered, or come from `$GIT_DIR`
    environment variable. If the repository is auto discovered via a .git
    file (e.g. from submodules, or a linked worktree), the .git location
    would be the final location where the .git directory is, not where the
    .git file is.
    +
    The pattern can contain standard globbing wildcards and two additional
    ones, `**/` and `/**`, that can match multiple path components. Please
    refer to linkgit:gitignore[5] for details. For convenience:
    
     * If the pattern starts with `~/`, `~` will be substituted with the
       content of the environment variable `HOME`.
    
     * If the pattern starts with `./`, it is replaced with the directory
       containing the current config file.
    
     * If the pattern does not start with either `~/`, `./` or `/`, `**/`
       will be automatically prepended. For example, the pattern `foo/bar`
       becomes `**/foo/bar` and would match `/any/path/to/foo/bar`.
    
     * If the pattern ends with `/`, `**` will be automatically added. For
       example, the pattern `foo/` becomes `foo/**`. In other words, it
       matches "foo" and everything inside, recursively.
    
    `gitdir/i`::
    	This is the same as `gitdir` except that matching is done
    	case-insensitively (e.g. on case-insensitive file sytems)
    
    A few more notes on matching via `gitdir` and `gitdir/i`:
    
     * Symlinks in `$GIT_DIR` are not resolved before matching.
    
     * Note that "../" is not special and will match literally, which is
       unlikely what you want.
    
    Example
    ~~~~~~~
    
    	# Core variables
    	[core]
    		; Don't trust file modes
    		filemode = false
    
    	# Our diff algorithm
    	[diff]
    		external = /usr/local/bin/diff-wrapper
    		renames = true
    
    	[branch "devel"]
    		remote = origin
    		merge = refs/heads/devel
    
    	# Proxy settings
    	[core]
    		gitProxy="ssh" for "kernel.org"
    		gitProxy=default-proxy ; for the rest
    
    	[include]
    		path = /path/to/foo.inc ; include by absolute path
    		path = foo ; expand "foo" relative to the current file
    		path = ~/foo ; expand "foo" in your `$HOME` directory
    
    	; include if $GIT_DIR is /path/to/foo/.git
    	[includeIf "gitdir:/path/to/foo/.git"]
    		path = /path/to/foo.inc
    
    	; include for all repositories inside /path/to/group
    	[includeIf "gitdir:/path/to/group/"]
    		path = /path/to/foo.inc
    
    	; include for all repositories inside $HOME/to/group
    	[includeIf "gitdir:~/to/group/"]
    		path = /path/to/foo.inc
    
    Values
    ~~~~~~
    
    Values of many variables are treated as a simple string, but there
    are variables that take values of specific types and there are rules
    as to how to spell them.
    
    boolean::
    
           When a variable is said to take a boolean value, many
           synonyms are accepted for 'true' and 'false'; these are all
           case-insensitive.
    
           true;; Boolean true can be spelled as `yes`, `on`, `true`,
    		or `1`.  Also, a variable defined without `= <value>`
    		is taken as true.
    
           false;; Boolean false can be spelled as `no`, `off`,
    		`false`, or `0`.
    +
    When converting value to the canonical form using `--bool` type
    specifier; 'git config' will ensure that the output is "true" or
    "false" (spelled in lowercase).
    
    integer::
           The value for many variables that specify various sizes can
           be suffixed with `k`, `M`,... to mean "scale the number by
           1024", "by 1024x1024", etc.
    
    color::
           The value for a variable that takes a color is a list of
           colors (at most two, one for foreground and one for background)
           and attributes (as many as you want), separated by spaces.
    +
    The basic colors accepted are `normal`, `black`, `red`, `green`, `yellow`,
    `blue`, `magenta`, `cyan` and `white`.  The first color given is the
    foreground; the second is the background.
    +
    Colors may also be given as numbers between 0 and 255; these use ANSI
    256-color mode (but note that not all terminals may support this).  If
    your terminal supports it, you may also specify 24-bit RGB values as
    hex, like `#ff0ab3`.
    +
    The accepted attributes are `bold`, `dim`, `ul`, `blink`, `reverse`,
    `italic`, and `strike` (for crossed-out or "strikethrough" letters).
    The position of any attributes with respect to the colors
    (before, after, or in between), doesn't matter. Specific attributes may
    be turned off by prefixing them with `no` or `no-` (e.g., `noreverse`,
    `no-ul`, etc).
    +
    An empty color string produces no color effect at all. This can be used
    to avoid coloring specific elements without disabling color entirely.
    +
    For git's pre-defined color slots, the attributes are meant to be reset
    at the beginning of each item in the colored output. So setting
    `color.decorate.branch` to `black` will paint that branch name in a
    plain `black`, even if the previous thing on the same output line (e.g.
    opening parenthesis before the list of branch names in `log --decorate`
    output) is set to be painted with `bold` or some other attribute.
    However, custom log formats may do more complicated and layered
    coloring, and the negated forms may be useful there.
    
    pathname::
    	A variable that takes a pathname value can be given a
    	string that begins with "`~/`" or "`~user/`", and the usual
    	tilde expansion happens to such a string: `~/`
    	is expanded to the value of `$HOME`, and `~user/` to the
    	specified user's home directory.
    
    
    Variables
    ~~~~~~~~~
    
    Note that this list is non-comprehensive and not necessarily complete.
    For command-specific variables, you will find a more detailed description
    in the appropriate manual page.
    
    Other git-related tools may and do use their own variables.  When
    inventing new variables for use in your own tool, make sure their
    names do not conflict with those that are used by Git itself and
    other popular tools, and describe them in your documentation.
    
    
    advice.*::
    	These variables control various optional help messages designed to
    	aid new users. All 'advice.*' variables default to 'true', and you
    	can tell Git that you do not need help by setting these to 'false':
    +
    --
    	pushUpdateRejected::
    		Set this variable to 'false' if you want to disable
    		'pushNonFFCurrent',
    		'pushNonFFMatching', 'pushAlreadyExists',
    		'pushFetchFirst', and 'pushNeedsForce'
    		simultaneously.
    	pushNonFFCurrent::
    		Advice shown when linkgit:git-push[1] fails due to a
    		non-fast-forward update to the current branch.
    	pushNonFFMatching::
    		Advice shown when you ran linkgit:git-push[1] and pushed
    		'matching refs' explicitly (i.e. you used ':', or
    		specified a refspec that isn't your current branch) and
    		it resulted in a non-fast-forward error.
    	pushAlreadyExists::
    		Shown when linkgit:git-push[1] rejects an update that
    		does not qualify for fast-forwarding (e.g., a tag.)
    	pushFetchFirst::
    		Shown when linkgit:git-push[1] rejects an update that
    		tries to overwrite a remote ref that points at an
    		object we do not have.
    	pushNeedsForce::
    		Shown when linkgit:git-push[1] rejects an update that
    		tries to overwrite a remote ref that points at an
    		object that is not a commit-ish, or make the remote
    		ref point at an object that is not a commit-ish.
    	statusHints::
    		Show directions on how to proceed from the current
    		state in the output of linkgit:git-status[1], in
    		the template shown when writing commit messages in
    		linkgit:git-commit[1], and in the help message shown
    		by linkgit:git-checkout[1] when switching branch.
    	statusUoption::
    		Advise to consider using the `-u` option to linkgit:git-status[1]
    		when the command takes more than 2 seconds to enumerate untracked
    		files.
    	commitBeforeMerge::
    		Advice shown when linkgit:git-merge[1] refuses to
    		merge to avoid overwriting local changes.
    	resolveConflict::
    		Advice shown by various commands when conflicts
    		prevent the operation from being performed.
    	implicitIdentity::
    		Advice on how to set your identity configuration when
    		your information is guessed from the system username and
    		domain name.
    	detachedHead::
    		Advice shown when you used linkgit:git-checkout[1] to
    		move to the detach HEAD state, to instruct how to create
    		a local branch after the fact.
    	amWorkDir::
    		Advice that shows the location of the patch file when
    		linkgit:git-am[1] fails to apply it.
    	rmHints::
    		In case of failure in the output of linkgit:git-rm[1],
    		show directions on how to proceed from the current state.
    --
    
    core.fileMode::
    	Tells Git if the executable bit of files in the working tree
    	is to be honored.
    +
    Some filesystems lose the executable bit when a file that is
    marked as executable is checked out, or checks out an
    non-executable file with executable bit on.
    linkgit:git-clone[1] or linkgit:git-init[1] probe the filesystem
    to see if it handles the executable bit correctly
    and this variable is automatically set as necessary.
    +
    A repository, however, may be on a filesystem that handles
    the filemode correctly, and this variable is set to 'true'
    when created, but later may be made accessible from another
    environment that loses the filemode (e.g. exporting ext4 via
    CIFS mount, visiting a Cygwin created repository with
    Git for Windows or Eclipse).
    In such a case it may be necessary to set this variable to 'false'.
    See linkgit:git-update-index[1].
    +
    The default is true (when core.filemode is not specified in the config file).
    
    core.hideDotFiles::
    	(Windows-only) If true, mark newly-created directories and files whose
    	name starts with a dot as hidden.  If 'dotGitOnly', only the `.git/`
    	directory is hidden, but no other files starting with a dot.  The
    	default mode is 'dotGitOnly'.
    
    core.ignoreCase::
    	If true, this option enables various workarounds to enable
    	Git to work better on filesystems that are not case sensitive,
    	like FAT. For example, if a directory listing finds
    	"makefile" when Git expects "Makefile", Git will assume
    	it is really the same file, and continue to remember it as
    	"Makefile".
    +
    The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
    will probe and set core.ignoreCase true if appropriate when the repository
    is created.
    
    core.precomposeUnicode::
    	This option is only used by Mac OS implementation of Git.
    	When core.precomposeUnicode=true, Git reverts the unicode decomposition
    	of filenames done by Mac OS. This is useful when sharing a repository
    	between Mac OS and Linux or Windows.
    	(Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7).
    	When false, file names are handled fully transparent by Git,
    	which is backward compatible with older versions of Git.
    
    core.protectHFS::
    	If set to true, do not allow checkout of paths that would
    	be considered equivalent to `.git` on an HFS+ filesystem.
    	Defaults to `true` on Mac OS, and `false` elsewhere.
    
    core.protectNTFS::
    	If set to true, do not allow checkout of paths that would
    	cause problems with the NTFS filesystem, e.g. conflict with
    	8.3 "short" names.
    	Defaults to `true` on Windows, and `false` elsewhere.
    
    core.trustctime::
    	If false, the ctime differences between the index and the
    	working tree are ignored; useful when the inode change time
    	is regularly modified by something outside Git (file system
    	crawlers and some backup systems).
    	See linkgit:git-update-index[1]. True by default.
    
    core.splitIndex::
    	If true, the split-index feature of the index will be used.
    	See linkgit:git-update-index[1]. False by default.
    
    core.untrackedCache::
    	Determines what to do about the untracked cache feature of the
    	index. It will be kept, if this variable is unset or set to
    	`keep`. It will automatically be added if set to `true`. And
    	it will automatically be removed, if set to `false`. Before
    	setting it to `true`, you should check that mtime is working
    	properly on your system.
    	See linkgit:git-update-index[1]. `keep` by default.
    
    core.checkStat::
    	Determines which stat fields to match between the index
    	and work tree. The user can set this to 'default' or
    	'minimal'. Default (or explicitly 'default'), is to check
    	all fields, including the sub-second part of mtime and ctime.
    
    core.quotePath::
    	Commands that output paths (e.g. 'ls-files', 'diff'), will
    	quote "unusual" characters in the pathname by enclosing the
    	pathname in double-quotes and escaping those characters with
    	backslashes in the same way C escapes control characters (e.g.
    	`\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
    	values larger than 0x80 (e.g. octal `\302\265` for "micro" in
    	UTF-8).  If this variable is set to false, bytes higher than
    	0x80 are not considered "unusual" any more. Double-quotes,
    	backslash and control characters are always escaped regardless
    	of the setting of this variable.  A simple space character is
    	not considered "unusual".  Many commands can output pathnames
    	completely verbatim using the `-z` option. The default value
    	is true.
    
    core.eol::
    	Sets the line ending type to use in the working directory for
    	files that have the `text` property set when core.autocrlf is false.
    	Alternatives are 'lf', 'crlf' and 'native', which uses the platform's
    	native line ending.  The default value is `native`.  See
    	linkgit:gitattributes[5] for more information on end-of-line
    	conversion.
    
    core.safecrlf::
    	If true, makes Git check if converting `CRLF` is reversible when
    	end-of-line conversion is active.  Git will verify if a command
    	modifies a file in the work tree either directly or indirectly.
    	For example, committing a file followed by checking out the
    	same file should yield the original file in the work tree.  If
    	this is not the case for the current setting of
    	`core.autocrlf`, Git will reject the file.  The variable can
    	be set to "warn", in which case Git will only warn about an
    	irreversible conversion but continue the operation.
    +
    CRLF conversion bears a slight chance of corrupting data.
    When it is enabled, Git will convert CRLF to LF during commit and LF to
    CRLF during checkout.  A file that contains a mixture of LF and
    CRLF before the commit cannot be recreated by Git.  For text
    files this is the right thing to do: it corrects line endings
    such that we have only LF line endings in the repository.
    But for binary files that are accidentally classified as text the
    conversion can corrupt data.
    +
    If you recognize such corruption early you can easily fix it by
    setting the conversion type explicitly in .gitattributes.  Right
    after committing you still have the original file in your work
    tree and this file is not yet corrupted.  You can explicitly tell
    Git that this file is binary and Git will handle the file
    appropriately.
    +
    Unfortunately, the desired effect of cleaning up text files with
    mixed line endings and the undesired effect of corrupting binary
    files cannot be distinguished.  In both cases CRLFs are removed
    in an irreversible way.  For text files this is the right thing
    to do because CRLFs are line endings, while for binary files
    converting CRLFs corrupts data.
    +
    Note, this safety check does not mean that a checkout will generate a
    file identical to the original file for a different setting of
    `core.eol` and `core.autocrlf`, but only for the current one.  For
    example, a text file with `LF` would be accepted with `core.eol=lf`
    and could later be checked out with `core.eol=crlf`, in which case the
    resulting file would contain `CRLF`, although the original file
    contained `LF`.  However, in both work trees the line endings would be
    consistent, that is either all `LF` or all `CRLF`, but never mixed.  A
    file with mixed line endings would be reported by the `core.safecrlf`
    mechanism.
    
    core.autocrlf::
    	Setting this variable to "true" is the same as setting
    	the `text` attribute to "auto" on all files and core.eol to "crlf".
    	Set to true if you want to have `CRLF` line endings in your
    	working directory and the repository has LF line endings.
    	This variable can be set to 'input',
    	in which case no output conversion is performed.
    
    core.symlinks::
    	If false, symbolic links are checked out as small plain files that
    	contain the link text. linkgit:git-update-index[1] and
    	linkgit:git-add[1] will not change the recorded type to regular
    	file. Useful on filesystems like FAT that do not support
    	symbolic links.
    +
    The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
    will probe and set core.symlinks false if appropriate when the repository
    is created.
    
    core.gitProxy::
    	A "proxy command" to execute (as 'command host port') instead
    	of establishing direct connection to the remote server when
    	using the Git protocol for fetching. If the variable value is
    	in the "COMMAND for DOMAIN" format, the command is applied only
    	on hostnames ending with the specified domain string. This variable
    	may be set multiple times and is matched in the given order;
    	the first match wins.
    +
    Can be overridden by the `GIT_PROXY_COMMAND` environment variable
    (which always applies universally, without the special "for"
    handling).
    +
    The special string `none` can be used as the proxy command to
    specify that no proxy be used for a given domain pattern.
    This is useful for excluding servers inside a firewall from
    proxy use, while defaulting to a common proxy for external domains.
    
    core.sshCommand::
    	If this variable is set, `git fetch` and `git push` will
    	use the specified command instead of `ssh` when they need to
    	connect to a remote system. The command is in the same form as
    	the `GIT_SSH_COMMAND` environment variable and is overridden
    	when the environment variable is set.
    
    core.ignoreStat::
    	If true, Git will avoid using lstat() calls to detect if files have
    	changed by setting the "assume-unchanged" bit for those tracked files
    	which it has updated identically in both the index and working tree.
    +
    When files are modified outside of Git, the user will need to stage
    the modified files explicitly (e.g. see 'Examples' section in
    linkgit:git-update-index[1]).
    Git will not normally detect changes to those files.
    +
    This is useful on systems where lstat() calls are very slow, such as
    CIFS/Microsoft Windows.
    +
    False by default.
    
    core.preferSymlinkRefs::
    	Instead of the default "symref" format for HEAD
    	and other symbolic reference files, use symbolic links.
    	This is sometimes needed to work with old scripts that
    	expect HEAD to be a symbolic link.
    
    core.bare::
    	If true this repository is assumed to be 'bare' and has no
    	working directory associated with it.  If this is the case a
    	number of commands that require a working directory will be
    	disabled, such as linkgit:git-add[1] or linkgit:git-merge[1].
    +
    This setting is automatically guessed by linkgit:git-clone[1] or
    linkgit:git-init[1] when the repository was created.  By default a
    repository that ends in "/.git" is assumed to be not bare (bare =
    false), while all other repositories are assumed to be bare (bare
    = true).
    
    core.worktree::
    	Set the path to the root of the working tree.
    	If `GIT_COMMON_DIR` environment variable is set, core.worktree
    	is ignored and not used for determining the root of working tree.
    	This can be overridden by the `GIT_WORK_TREE` environment
    	variable and the `--work-tree` command-line option.
    	The value can be an absolute path or relative to the path to
    	the .git directory, which is either specified by --git-dir
    	or GIT_DIR, or automatically discovered.
    	If --git-dir or GIT_DIR is specified but none of
    	--work-tree, GIT_WORK_TREE and core.worktree is specified,
    	the current working directory is regarded as the top level
    	of your working tree.
    +
    Note that this variable is honored even when set in a configuration
    file in a ".git" subdirectory of a directory and its value differs
    from the latter directory (e.g. "/path/to/.git/config" has
    core.worktree set to "/different/path"), which is most likely a
    misconfiguration.  Running Git commands in the "/path/to" directory will
    still use "/different/path" as the root of the work tree and can cause
    confusion unless you know what you are doing (e.g. you are creating a
    read-only snapshot of the same index to a location different from the
    repository's usual working tree).
    
    core.logAllRefUpdates::
    	Enable the reflog. Updates to a ref <ref> is logged to the file
    	"`$GIT_DIR/logs/<ref>`", by appending the new and old
    	SHA-1, the date/time and the reason of the update, but
    	only when the file exists.  If this configuration
    	variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
    	file is automatically created for branch heads (i.e. under
    	`refs/heads/`), remote refs (i.e. under `refs/remotes/`),
    	note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
    	If it is set to `always`, then a missing reflog is automatically
    	created for any ref under `refs/`.
    +
    This information can be used to determine what commit
    was the tip of a branch "2 days ago".
    +
    This value is true by default in a repository that has
    a working directory associated with it, and false by
    default in a bare repository.
    
    core.repositoryFormatVersion::
    	Internal variable identifying the repository format and layout
    	version.
    
    core.sharedRepository::
    	When 'group' (or 'true'), the repository is made shareable between
    	several users in a group (making sure all the files and objects are
    	group-writable). When 'all' (or 'world' or 'everybody'), the
    	repository will be readable by all users, additionally to being
    	group-shareable. When 'umask' (or 'false'), Git will use permissions
    	reported by umask(2). When '0xxx', where '0xxx' is an octal number,
    	files in the repository will have this mode value. '0xxx' will override
    	user's umask value (whereas the other options will only override
    	requested parts of the user's umask value). Examples: '0660' will make
    	the repo read/write-able for the owner and group, but inaccessible to
    	others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a
    	repository that is group-readable but not group-writable.
    	See linkgit:git-init[1]. False by default.
    
    core.warnAmbiguousRefs::
    	If true, Git will warn you if the ref name you passed it is ambiguous
    	and might match multiple refs in the repository. True by default.
    
    core.compression::
    	An integer -1..9, indicating a default compression level.
    	-1 is the zlib default. 0 means no compression,
    	and 1..9 are various speed/size tradeoffs, 9 being slowest.
    	If set, this provides a default to other compression variables,
    	such as `core.looseCompression` and `pack.compression`.
    
    core.looseCompression::
    	An integer -1..9, indicating the compression level for objects that
    	are not in a pack file. -1 is the zlib default. 0 means no
    	compression, and 1..9 are various speed/size tradeoffs, 9 being
    	slowest.  If not set,  defaults to core.compression.  If that is
    	not set,  defaults to 1 (best speed).
    
    core.packedGitWindowSize::
    	Number of bytes of a pack file to map into memory in a
    	single mapping operation.  Larger window sizes may allow
    	your system to process a smaller number of large pack files
    	more quickly.  Smaller window sizes will negatively affect
    	performance due to increased calls to the operating system's
    	memory manager, but may improve performance when accessing
    	a large number of large pack files.
    +
    Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
    MiB on 32 bit platforms and 1 GiB on 64 bit platforms.  This should
    be reasonable for all users/operating systems.  You probably do
    not need to adjust this value.
    +
    Common unit suffixes of 'k', 'm', or 'g' are supported.
    
    core.packedGitLimit::
    	Maximum number of bytes to map simultaneously into memory
    	from pack files.  If Git needs to access more than this many
    	bytes at once to complete an operation it will unmap existing
    	regions to reclaim virtual address space within the process.
    +
    Default is 256 MiB on 32 bit platforms and 8 GiB on 64 bit platforms.
    This should be reasonable for all users/operating systems, except on
    the largest projects.  You probably do not need to adjust this value.
    +
    Common unit suffixes of 'k', 'm', or 'g' are supported.
    
    core.deltaBaseCacheLimit::
    	Maximum number of bytes to reserve for caching base objects
    	that may be referenced by multiple deltified objects.  By storing the
    	entire decompressed base objects in a cache Git is able
    	to avoid unpacking and decompressing frequently used base
    	objects multiple times.
    +
    Default is 96 MiB on all platforms.  This should be reasonable
    for all users/operating systems, except on the largest projects.
    You probably do not need to adjust this value.
    +
    Common unit suffixes of 'k', 'm', or 'g' are supported.
    
    core.bigFileThreshold::
    	Files larger than this size are stored deflated, without
    	attempting delta compression.  Storing large files without
    	delta compression avoids excessive memory usage, at the
    	slight expense of increased disk usage. Additionally files
    	larger than this size are always treated as binary.
    +
    Default is 512 MiB on all platforms.  This should be reasonable
    for most projects as source code and other text files can still
    be delta compressed, but larger binary media files won't be.
    +
    Common unit suffixes of 'k', 'm', or 'g' are supported.
    
    core.excludesFile::
    	Specifies the pathname to the file that contains patterns to
    	describe paths that are not meant to be tracked, in addition
    	to '.gitignore' (per-directory) and '.git/info/exclude'.
    	Defaults to `$XDG_CONFIG_HOME/git/ignore`.
    	If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore`
    	is used instead. See linkgit:gitignore[5].
    
    core.askPass::
    	Some commands (e.g. svn and http interfaces) that interactively
    	ask for a password can be told to use an external program given
    	via the value of this variable. Can be overridden by the `GIT_ASKPASS`
    	environment variable. If not set, fall back to the value of the
    	`SSH_ASKPASS` environment variable or, failing that, a simple password
    	prompt. The external program shall be given a suitable prompt as
    	command-line argument and write the password on its STDOUT.
    
    core.attributesFile::
    	In addition to '.gitattributes' (per-directory) and
    	'.git/info/attributes', Git looks into this file for attributes
    	(see linkgit:gitattributes[5]). Path expansions are made the same
    	way as for `core.excludesFile`. Its default value is
    	`$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
    	set or empty, `$HOME/.config/git/attributes` is used instead.
    
    core.hooksPath::
    	By default Git will look for your hooks in the
    	'$GIT_DIR/hooks' directory. Set this to different path,
    	e.g. '/etc/git/hooks', and Git will try to find your hooks in
    	that directory, e.g. '/etc/git/hooks/pre-receive' instead of
    	in '$GIT_DIR/hooks/pre-receive'.
    +
    The path can be either absolute or relative. A relative path is
    taken as relative to the directory where the hooks are run (see
    the "DESCRIPTION" section of linkgit:githooks[5]).
    +
    This configuration variable is useful in cases where you'd like to
    centrally configure your Git hooks instead of configuring them on a
    per-repository basis, or as a more flexible and centralized
    alternative to having an `init.templateDir` where you've changed
    default hooks.
    
    core.editor::
    	Commands such as `commit` and `tag` that lets you edit
    	messages by launching an editor uses the value of this
    	variable when it is set, and the environment variable
    	`GIT_EDITOR` is not set.  See linkgit:git-var[1].
    
    core.commentChar::
    	Commands such as `commit` and `tag` that lets you edit
    	messages consider a line that begins with this character
    	commented, and removes them after the editor returns
    	(default '#').
    +
    If set to "auto", `git-commit` would select a character that is not
    the beginning character of any line in existing commit messages.
    
    core.packedRefsTimeout::
    	The length of time, in milliseconds, to retry when trying to
    	lock the `packed-refs` file. Value 0 means not to retry at
    	all; -1 means to try indefinitely. Default is 1000 (i.e.,
    	retry for 1 second).
    
    sequence.editor::
    	Text editor used by `git rebase -i` for editing the rebase instruction file.
    	The value is meant to be interpreted by the shell when it is used.
    	It can be overridden by the `GIT_SEQUENCE_EDITOR` environment variable.
    	When not configured the default commit message editor is used instead.
    
    core.pager::
    	Text viewer for use by Git commands (e.g., 'less').  The value
    	is meant to be interpreted by the shell.  The order of preference
    	is the `$GIT_PAGER` environment variable, then `core.pager`
    	configuration, then `$PAGER`, and then the default chosen at
    	compile time (usually 'less').
    +
    When the `LESS` environment variable is unset, Git sets it to `FRX`
    (if `LESS` environment variable is set, Git does not change it at
    all).  If you want to selectively override Git's default setting
    for `LESS`, you can set `core.pager` to e.g. `less -S`.  This will
    be passed to the shell by Git, which will translate the final
    command to `LESS=FRX less -S`. The environment does not set the
    `S` option but the command line does, instructing less to truncate
    long lines. Similarly, setting `core.pager` to `less -+F` will
    deactivate the `F` option specified by the environment from the
    command-line, deactivating the "quit if one screen" behavior of
    `less`.  One can specifically activate some flags for particular
    commands: for example, setting `pager.blame` to `less -S` enables
    line truncation only for `git blame`.
    +
    Likewise, when the `LV` environment variable is unset, Git sets it
    to `-c`.  You can override this setting by exporting `LV` with
    another value or setting `core.pager` to `lv +c`.
    
    core.whitespace::
    	A comma separated list of common whitespace problems to
    	notice.  'git diff' will use `color.diff.whitespace` to
    	highlight them, and 'git apply --whitespace=error' will
    	consider them as errors.  You can prefix `-` to disable
    	any of them (e.g. `-trailing-space`):
    +
    * `blank-at-eol` treats trailing whitespaces at the end of the line
      as an error (enabled by default).
    * `space-before-tab` treats a space character that appears immediately
      before a tab character in the initial indent part of the line as an
      error (enabled by default).
    * `indent-with-non-tab` treats a line that is indented with space
      characters instead of the equivalent tabs as an error (not enabled by
      default).
    * `tab-in-indent` treats a tab character in the initial indent part of
      the line as an error (not enabled by default).
    * `blank-at-eof` treats blank lines added at the end of file as an error
      (enabled by default).
    * `trailing-space` is a short-hand to cover both `blank-at-eol` and
      `blank-at-eof`.
    * `cr-at-eol` treats a carriage-return at the end of line as
      part of the line terminator, i.e. with it, `trailing-space`
      does not trigger if the character before such a carriage-return
      is not a whitespace (not enabled by default).
    * `tabwidth=<n>` tells how many character positions a tab occupies; this
      is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
      errors. The default tab width is 8. Allowed values are 1 to 63.
    
    core.fsyncObjectFiles::
    	This boolean will enable 'fsync()' when writing object files.
    +
    This is a total waste of time and effort on a filesystem that orders
    data writes properly, but can be useful for filesystems that do not use
    journalling (traditional UNIX filesystems) or that only journal metadata
    and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
    
    core.preloadIndex::
    	Enable parallel index preload for operations like 'git diff'
    +
    This can speed up operations like 'git diff' and 'git status' especially
    on filesystems like NFS that have weak caching semantics and thus
    relatively high IO latencies.  When enabled, Git will do the
    index comparison to the filesystem data in parallel, allowing
    overlapping IO's.  Defaults to true.
    
    core.createObject::
    	You can set this to 'link', in which case a hardlink followed by
    	a delete of the source are used to make sure that object creation
    	will not overwrite existing objects.
    +
    On some file system/operating system combinations, this is unreliable.
    Set this config setting to 'rename' there; However, This will remove the
    check that makes sure that existing object files will not get overwritten.
    
    core.notesRef::
    	When showing commit messages, also show notes which are stored in
    	the given ref.  The ref must be fully qualified.  If the given
    	ref does not exist, it is not an error but means that no
    	notes should be printed.
    +
    This setting defaults to "refs/notes/commits", and it can be overridden by
    the `GIT_NOTES_REF` environment variable.  See linkgit:git-notes[1].
    
    core.sparseCheckout::
    	Enable "sparse checkout" feature. See section "Sparse checkout" in
    	linkgit:git-read-tree[1] for more information.
    
    core.abbrev::
    	Set the length object names are abbreviated to.  If
    	unspecified or set to "auto", an appropriate value is
    	computed based on the approximate number of packed objects
    	in your repository, which hopefully is enough for
    	abbreviated object names to stay unique for some time.
    
    add.ignoreErrors::
    add.ignore-errors (deprecated)::
    	Tells 'git add' to continue adding files when some files cannot be
    	added due to indexing errors. Equivalent to the `--ignore-errors`
    	option of linkgit:git-add[1].  `add.ignore-errors` is deprecated,
    	as it does not follow the usual naming convention for configuration
    	variables.
    
    alias.*::
    	Command aliases for the linkgit:git[1] command wrapper - e.g.
    	after defining "alias.last = cat-file commit HEAD", the invocation
    	"git last" is equivalent to "git cat-file commit HEAD". To avoid
    	confusion and troubles with script usage, aliases that
    	hide existing Git commands are ignored. Arguments are split by
    	spaces, the usual shell quoting and escaping is supported.
    	A quote pair or a backslash can be used to quote them.
    +
    If the alias expansion is prefixed with an exclamation point,
    it will be treated as a shell command.  For example, defining
    "alias.new = !gitk --all --not ORIG_HEAD", the invocation
    "git new" is equivalent to running the shell command
    "gitk --all --not ORIG_HEAD".  Note that shell commands will be
    executed from the top-level directory of a repository, which may
    not necessarily be the current directory.
    `GIT_PREFIX` is set as returned by running 'git rev-parse --show-prefix'
    from the original current directory. See linkgit:git-rev-parse[1].
    
    am.keepcr::
    	If true, git-am will call git-mailsplit for patches in mbox format
    	with parameter `--keep-cr`. In this case git-mailsplit will
    	not remove `\r` from lines ending with `\r\n`. Can be overridden
    	by giving `--no-keep-cr` from the command line.
    	See linkgit:git-am[1], linkgit:git-mailsplit[1].
    
    am.threeWay::
    	By default, `git am` will fail if the patch does not apply cleanly. When
    	set to true, this setting tells `git am` to fall back on 3-way merge if
    	the patch records the identity of blobs it is supposed to apply to and
    	we have those blobs available locally (equivalent to giving the `--3way`
    	option from the command line). Defaults to `false`.
    	See linkgit:git-am[1].
    
    apply.ignoreWhitespace::
    	When set to 'change', tells 'git apply' to ignore changes in
    	whitespace, in the same way as the `--ignore-space-change`
    	option.
    	When set to one of: no, none, never, false tells 'git apply' to
    	respect all whitespace differences.
    	See linkgit:git-apply[1].
    
    apply.whitespace::
    	Tells 'git apply' how to handle whitespaces, in the same way
    	as the `--whitespace` option. See linkgit:git-apply[1].
    
    branch.autoSetupMerge::
    	Tells 'git branch' and 'git checkout' to set up new branches
    	so that linkgit:git-pull[1] will appropriately merge from the
    	starting point branch. Note that even if this option is not set,
    	this behavior can be chosen per-branch using the `--track`
    	and `--no-track` options. The valid settings are: `false` -- no
    	automatic setup is done; `true` -- automatic setup is done when the
    	starting point is a remote-tracking branch; `always` --
    	automatic setup is done when the starting point is either a
    	local branch or remote-tracking
    	branch. This option defaults to true.
    
    branch.autoSetupRebase::
    	When a new branch is created with 'git branch' or 'git checkout'
    	that tracks another branch, this variable tells Git to set
    	up pull to rebase instead of merge (see "branch.<name>.rebase").
    	When `never`, rebase is never automatically set to true.
    	When `local`, rebase is set to true for tracked branches of
    	other local branches.
    	When `remote`, rebase is set to true for tracked branches of
    	remote-tracking branches.
    	When `always`, rebase will be set to true for all tracking
    	branches.
    	See "branch.autoSetupMerge" for details on how to set up a
    	branch to track another branch.
    	This option defaults to never.
    
    branch.<name>.remote::
    	When on branch <name>, it tells 'git fetch' and 'git push'
    	which remote to fetch from/push to.  The remote to push to
    	may be overridden with `remote.pushDefault` (for all branches).
    	The remote to push to, for the current branch, may be further
    	overridden by `branch.<name>.pushRemote`.  If no remote is
    	configured, or if you are not on any branch, it defaults to
    	`origin` for fetching and `remote.pushDefault` for pushing.
    	Additionally, `.` (a period) is the current local repository
    	(a dot-repository), see `branch.<name>.merge`'s final note below.
    
    branch.<name>.pushRemote::
    	When on branch <name>, it overrides `branch.<name>.remote` for
    	pushing.  It also overrides `remote.pushDefault` for pushing
    	from branch <name>.  When you pull from one place (e.g. your
    	upstream) and push to another place (e.g. your own publishing
    	repository), you would want to set `remote.pushDefault` to
    	specify the remote to push to for all branches, and use this
    	option to override it for a specific branch.
    
    branch.<name>.merge::
    	Defines, together with branch.<name>.remote, the upstream branch
    	for the given branch. It tells 'git fetch'/'git pull'/'git rebase' which
    	branch to merge and can also affect 'git push' (see push.default).
    	When in branch <name>, it tells 'git fetch' the default
    	refspec to be marked for merging in FETCH_HEAD. The value is
    	handled like the remote part of a refspec, and must match a
    	ref which is fetched from the remote given by
    	"branch.<name>.remote".
    	The merge information is used by 'git pull' (which at first calls
    	'git fetch') to lookup the default branch for merging. Without
    	this option, 'git pull' defaults to merge the first refspec fetched.
    	Specify multiple values to get an octopus merge.
    	If you wish to setup 'git pull' so that it merges into <name> from
    	another branch in the local repository, you can point
    	branch.<name>.merge to the desired branch, and use the relative path
    	setting `.` (a period) for branch.<name>.remote.
    
    branch.<name>.mergeOptions::
    	Sets default options for merging into branch <name>. The syntax and
    	supported options are the same as those of linkgit:git-merge[1], but
    	option values containing whitespace characters are currently not
    	supported.
    
    branch.<name>.rebase::
    	When true, rebase the branch <name> on top of the fetched branch,
    	instead of merging the default branch from the default remote when
    	"git pull" is run. See "pull.rebase" for doing this in a non
    	branch-specific manner.
    +
    When preserve, also pass `--preserve-merges` along to 'git rebase'
    so that locally committed merge commits will not be flattened
    by running 'git pull'.
    +