-
init.templateDir -
Specify the directory from which templates will be copied. (See the "TEMPLATE DIRECTORY" section of git-init[1].)
-
init.defaultBranch -
Allows overriding the default branch name e.g. when initializing a new repository.
-
init.defaultObjectFormat -
Allows overriding the default object format for new repositories. See --object-format= in git-init[1]. Both the command line option and the GIT_DEFAULT_HASH environment variable take precedence over this config.
-
init.defaultRefFormat -
Allows overriding the default ref storage format for new repositories. See --ref-format= in git-init[1]. Both the command line option and the GIT_DEFAULT_REF_FORMAT environment variable take precedence over this config.
-
instaweb.browser
-
Specify the program that will be used to browse your working repository in gitweb. See git-instaweb[1].
-
instaweb.httpd
-
The HTTP daemon command-line to start gitweb on your working repository. See git-instaweb[1].
-
instaweb.local
-
If true the web server started by git-instaweb[1] will be bound to the local IP (127.0.0.1).
-
instaweb.modulePath
-
The default module path for git-instaweb[1] to use instead of /usr/lib/apache2/modules. Only used if httpd is Apache.
-
instaweb.port
-
The port number to bind the gitweb httpd to. See git-instaweb[1].
-
interactive.singleKey
-
When set to true, allow the user to provide one-letter input with a single key (i.e., without hitting the Enter key) in interactive commands. This is currently used by the --patch mode of git-add[1], git-checkout[1], git-restore[1], git-commit[1], git-reset[1], and git-stash[1].
-
interactive.diffFilter
-
When an interactive command (such as git add --patch) shows a colorized diff, git will pipe the diff through the shell command defined by this configuration variable. The command may mark up the diff further for human consumption, provided that it retains a one-to-one correspondence with the lines in the original diff. Defaults to disabled (no filtering).
-
log.abbrevCommit -
If true, make git-log[1], git-show[1], and git-whatchanged[1] assume --abbrev-commit. You may override this option with --no-abbrev-commit.
-
log.date -
Set the default date-time mode for the log command. Setting a value for log.date is similar to using git log's --date option. See git-log[1] for details.
If the format is set to "auto:foo" and the pager is in use, format "foo" will be used for the date format. Otherwise, "default" will be used.
-
log.decorate -
Print out the ref names of any commits that are shown by the log command. Possible values are:
-
short -
the ref name prefixes refs/heads/, refs/tags/ and refs/remotes/ are not printed.
-
full -
the full ref name (including prefix) are printed.
-
auto -
if the output is going to a terminal, the ref names are shown as if short were given, otherwise no ref names are shown.
This is the same as the --decorate option of the git log.
-
log.initialDecorationSet -
By default, git log only shows decorations for certain known ref namespaces. If all is specified, then show all refs as decorations.
-
log.excludeDecoration -
Exclude the specified patterns from the log decorations. This is similar to the --decorate-refs-exclude command-line option, but the config option can be overridden by the --decorate-refs option.
-
log.diffMerges -
Set diff format to be used when --diff-merges=on is specified, see --diff-merges in git-log[1] for details. Defaults to separate.
-
log.follow -
If true, git log will act as if the --follow option was used when a single <path> is given. This has the same limitations as --follow, i.e. it cannot be used to follow multiple files and does not work well on non-linear history.
-
log.graphColors -
A list of colors, separated by commas, that can be used to draw history lines in git log --graph.
-
log.showRoot -
If true, the initial commit will be shown as a big creation event. This is equivalent to a diff against an empty tree. Tools like git-log[1] or git-whatchanged[1], which normally hide the root commit will now show it. True by default.
-
log.showSignature -
If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume --show-signature.
-
log.mailmap -
If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume --use-mailmap, otherwise assume --no-use-mailmap. True by default.
-
lsrefs.unborn
-
May be "advertise" (the default), "allow", or "ignore". If "advertise", the server will respond to the client sending "unborn" (as described in gitprotocol-v2[5]) and will advertise support for this feature during the protocol v2 capability advertisement. "allow" is the same as "advertise" except that the server will not advertise support for this feature; this is useful for load-balanced servers that cannot be updated atomically (for example), since the administrator could configure "allow", then after a delay, configure "advertise".
-
mailinfo.scissors
-
If true, makes git-mailinfo[1] (and therefore git-am[1]) act by default as if the --scissors option was provided on the command-line. When active, this feature removes everything from the message body before a scissors line (i.e. consisting mainly of ">8", "8<" and "-").
-
mailmap.file
-
The location of an augmenting mailmap file. The default mailmap, located in the root of the repository, is loaded first, then the mailmap file pointed to by this variable. The location of the mailmap file may be in a repository subdirectory, or somewhere outside of the repository itself. See git-shortlog[1] and git-blame[1].
-
mailmap.blob
-
Like mailmap.file, but consider the value as a reference to a blob in the repository. If both mailmap.file and mailmap.blob are given, both are parsed, with entries from mailmap.file taking precedence. In a bare repository, this defaults to HEAD:.mailmap. In a non-bare repository, it defaults to empty.
-
maintenance.auto
-
This boolean config option controls whether some commands run git maintenance run --auto after doing their normal work. Defaults to true.
-
maintenance.autoDetach
-
Many Git commands trigger automatic maintenance after they have written data into the repository. This boolean config option controls whether this automatic maintenance shall happen in the foreground or whether the maintenance process shall detach and continue to run in the background.
If unset, the value of gc.autoDetach is used as a fallback. Defaults to true if both are unset, meaning that the maintenance process will detach.
-
maintenance.strategy
-
This string config option provides a way to specify one of a few recommended strategies for repository maintenance. This affects which tasks are run during git maintenance run, provided no --task=<task> arguments are provided. This setting impacts manual maintenance, auto-maintenance as well as scheduled maintenance. The tasks that run may be different depending on the maintenance type.
The maintenance strategy can be further tweaked by setting maintenance.<task>.enabled and maintenance.<task>.schedule. If set, these values are used instead of the defaults provided by maintenance.strategy.
The possible strategies are:
-
none: This strategy implies no tasks are run at all. This is the default strategy for scheduled maintenance.
-
gc: This strategy runs the gc task. This is the default strategy for manual maintenance.
-
geometric: This strategy performs geometric repacking of packfiles and keeps auxiliary data structures up-to-date. The strategy expires data in the reflog and removes worktrees that cannot be located anymore. When the geometric repacking strategy would decide to do an all-into-one repack, then the strategy generates a cruft pack for all unreachable objects. Objects that are already part of a cruft pack will be expired.
This repacking strategy is a full replacement for the gc strategy and is recommended for large repositories.
-
incremental: This setting optimizes for performing small maintenance activities that do not delete any data. This does not schedule the gc task, but runs the prefetch and commit-graph tasks hourly, the loose-objects and incremental-repack tasks daily, and the pack-refs task weekly. Manual repository maintenance uses the gc task.
-
maintenance.<task>.enabled
-
This boolean config option controls whether the maintenance task with name <task> is run when no --task option is specified to git maintenance run. These config values are ignored if a --task option exists. By default, only maintenance.gc.enabled is true.
-
maintenance.<task>.schedule
-
This config option controls whether or not the given <task> runs during a git maintenance run --schedule=<frequency> command. The value must be one of "hourly", "daily", or "weekly".
-
maintenance.commit-graph.auto
-
This integer config option controls how often the commit-graph task should be run as part of git maintenance run --auto. If zero, then the commit-graph task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of reachable commits that are not in the commit-graph file is at least the value of maintenance.commit-graph.auto. The default value is 100.
-
maintenance.loose-objects.auto
-
This integer config option controls how often the loose-objects task should be run as part of git maintenance run --auto. If zero, then the loose-objects task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of loose objects is at least the value of maintenance.loose-objects.auto. The default value is 100.
-
maintenance.loose-objects.batchSize
-
This integer config option controls the maximum number of loose objects written into a packfile during the loose-objects task. The default is fifty thousand. Use value 0 to indicate no limit.
-
maintenance.incremental-repack.auto
-
This integer config option controls how often the incremental-repack task should be run as part of git maintenance run --auto. If zero, then the incremental-repack task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of pack-files not in the multi-pack-index is at least the value of maintenance.incremental-repack.auto. The default value is 10.
-
maintenance.geometric-repack.auto
-
This integer config option controls how often the geometric-repack task should be run as part of git maintenance run --auto. If zero, then the geometric-repack task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run either when there are packfiles that need to be merged together to retain the geometric progression, or when there are at least this many loose objects that would be written into a new packfile. The default value is 100.
-
maintenance.geometric-repack.splitFactor
-
This integer config option controls the factor used for the geometric sequence. See the --geometric= option in git-repack[1] for more details. Defaults to 2.
-
maintenance.reflog-expire.auto
-
This integer config option controls how often the reflog-expire task should be run as part of git maintenance run --auto. If zero, then the reflog-expire task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of expired reflog entries in the "HEAD" reflog is at least the value of maintenance.loose-objects.auto. The default value is 100.
-
maintenance.rerere-gc.auto
-
This integer config option controls how often the rerere-gc task should be run as part of git maintenance run --auto. If zero, then the rerere-gc task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, any positive value implies the command will run when the "rr-cache" directory exists and has at least one entry, regardless of whether it is stale or not. This heuristic may be refined in the future. The default value is 1.
-
maintenance.worktree-prune.auto
-
This integer config option controls how often the worktree-prune task should be run as part of git maintenance run --auto. If zero, then the worktree-prune task will not run with the --auto option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of prunable worktrees exceeds the value. The default value is 1.
-
man.viewer
-
Specify the programs that may be used to display help in the man format. See git-help[1].
-
man.<tool>.cmd
-
Specify the command to invoke the specified man viewer. The specified command is evaluated in shell with the man page passed as an argument. (See git-help[1].)
-
man.<tool>.path
-
Override the path for the given tool that may be used to display help in the man format. See git-help[1].
-
merge.conflictStyle -
Specify the style in which conflicted hunks are written out to working tree files upon merge. The default is "merge", which shows a <<<<<<< conflict marker, changes made by one side, a ======= marker, changes made by the other side, and then a >>>>>>> marker. An alternate style, "diff3", adds a ||||||| marker and the original text before the ======= marker. The "merge" style tends to produce smaller conflict regions than diff3, both because of the exclusion of the original text, and because when a subset of lines match on the two sides, they are just pulled out of the conflict region. Another alternate style, "zdiff3", is similar to diff3 but removes matching lines on the two sides from the conflict region when those matching lines appear near either the beginning or end of a conflict region.
-
merge.defaultToUpstream -
If merge is called without any commit argument, merge the upstream branches configured for the current branch by using their last observed values stored in their remote-tracking branches. The values of the branch.<current branch>.merge that name the branches at the remote named by branch.<current-branch>.remote are consulted, and then they are mapped via remote.<remote>.fetch to their corresponding remote-tracking branches, and the tips of these tracking branches are merged. Defaults to true.
-
merge.ff -
By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to false, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the --no-ff option from the command line). When set to only, only such fast-forward merges are allowed (equivalent to giving the --ff-only option from the command line).
-
merge.verifySignatures -
If true, this is equivalent to the --verify-signatures command line option. See git-merge[1] for details.
-
merge.branchdesc -
In addition to branch names, populate the log message with the branch description text associated with them. Defaults to false.
-
merge.log -
In addition to branch names, populate the log message with at most the specified number of one-line descriptions from the actual commits that are being merged. Defaults to false, and true is a synonym for 20.
-
merge.suppressDest -
By adding a glob that matches the names of integration branches to this multi-valued configuration variable, the default merge message computed for merges into these integration branches will omit "into <branch-name>" from its title.
An element with an empty value can be used to clear the list of globs accumulated from previous configuration entries. When there is no merge.suppressDest variable defined, the default value of master is used for backward compatibility.
-
merge.renameLimit -
The number of files to consider in the exhaustive portion of rename detection during a merge. If not specified, defaults to the value of diff.renameLimit. If neither merge.renameLimit nor diff.renameLimit are specified, currently defaults to 7000. This setting has no effect if rename detection is turned off.
-
merge.renames -
Whether Git detects renames. If set to false, rename detection is disabled. If set to true, basic rename detection is enabled. Defaults to the value of diff.renames.
-
merge.directoryRenames -
Whether Git detects directory renames, affecting what happens at merge time to new files added to a directory on one side of history when that directory was renamed on the other side of history. Possible values are:
-
false -
Directory rename detection is disabled, meaning that such new files will be left behind in the old directory.
-
true -
Directory rename detection is enabled, meaning that such new files will be moved into the new directory.
-
conflict -
A conflict will be reported for such paths.
If merge.renames is false, merge.directoryRenames is ignored and treated as false. Defaults to conflict.
-
merge.renormalize -
Tell Git that canonical representation of files in the repository has changed over time (e.g. earlier commits record text files with CRLF line endings, but recent ones use LF line endings). In such a repository, for each file where a three-way content merge is needed, Git can convert the data recorded in commits to a canonical form before performing a merge to reduce unnecessary conflicts. For more information, see section "Merging branches with differing checkin/checkout attributes" in gitattributes[5].
-
merge.stat -
What, if anything, to print between ORIG_HEAD and the merge result at the end of the merge. Possible values are:
-
false -
Show nothing.
-
true -
Show git diff --diffstat --summary ORIG_HEAD.
-
compact -
Show git diff --compact-summary ORIG_HEAD.
but any unrecognised value (e.g., a value added by a future version of Git) is taken as true instead of triggering an error. Defaults to true.
-
merge.autoStash -
When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run merge on a dirty worktree. However, use with care: the final stash application after a successful merge might result in non-trivial conflicts. This option can be overridden by the --no-autostash and --autostash options of git-merge[1]. Defaults to false.
-
merge.tool -
Controls which merge tool is used by git-mergetool[1]. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool.<tool>.cmd variable is defined.
-
merge.guitool -
Controls which merge tool is used by git-mergetool[1] when the -g/--gui flag is specified. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool.<guitool>.cmd variable is defined.
-
araxis
-
bc
-
codecompare
-
deltawalker
-
diffmerge
-
diffuse
-
ecmerge
-
emerge
-
examdiff
-
guiffy
-
gvimdiff
-
kdiff3
-
meld
-
nvimdiff
-
opendiff
-
p4merge
-
smerge
-
tkdiff
-
tortoisemerge
-
vimdiff
-
vscode
-
winmerge
-
xxdiff
-
merge.verbosity -
Controls the amount of output shown by the recursive merge strategy. Level 0 outputs nothing except a final error message if conflicts were detected. Level 1 outputs only conflicts, 2 outputs conflicts and file changes. Level 5 and above outputs debugging information. The default is level 2. Can be overridden by the GIT_MERGE_VERBOSITY environment variable.
-
merge.<driver>.name -
Defines a human-readable name for a custom low-level merge driver. See gitattributes[5] for details.
-
merge.<driver>.driver -
Defines the command that implements a custom low-level merge driver. See gitattributes[5] for details.
-
merge.<driver>.recursive -
Names a low-level merge driver to be used when performing an internal merge between common ancestors. See gitattributes[5] for details.
-
mergetool.<tool>.path -
Override the path for the given tool. This is useful in case your tool is not in the $PATH.
-
mergetool.<tool>.cmd -
Specify the command to invoke the specified merge tool. The specified command is evaluated in shell with the following variables available: BASE is the name of a temporary file containing the common base of the files to be merged, if available; LOCAL is the name of a temporary file containing the contents of the file on the current branch; REMOTE is the name of a temporary file containing the contents of the file from the branch being merged; MERGED contains the name of the file to which the merge tool should write the results of a successful merge.
-
mergetool.<tool>.hideResolved -
Allows the user to override the global mergetool.hideResolved value for a specific tool. See mergetool.hideResolved for the full description.
-
mergetool.<tool>.trustExitCode -
For a custom merge command, specify whether the exit code of the merge command can be used to determine whether the merge was successful. If this is not set to true then the merge target file timestamp is checked, and the merge is assumed to have been successful if the file has been updated; otherwise, the user is prompted to indicate the success of the merge.
-
mergetool.meld.hasOutput -
Older versions of meld do not support the --output option. Git will attempt to detect whether meld supports --output by inspecting the output of meld --help. Configuring mergetool.meld.hasOutput will make Git skip these checks and use the configured value instead. Setting mergetool.meld.hasOutput to true tells Git to unconditionally use the --output option, and false avoids using --output.
-
mergetool.meld.useAutoMerge -
When the --auto-merge is given, meld will merge all non-conflicting parts automatically, highlight the conflicting parts, and wait for user decision. Setting mergetool.meld.useAutoMerge to true tells Git to unconditionally use the --auto-merge option with meld. Setting this value to auto makes git detect whether --auto-merge is supported and will only use --auto-merge when available. A value of false avoids using --auto-merge altogether, and is the default value.
-
mergetool.<variant>.layout -
Configure the split window layout for vimdiff’s <variant>, which is any of vimdiff, nvimdiff, gvimdiff. Upon launching git mergetool with --tool=<variant> (or without --tool if merge.tool is configured as <variant>), Git will consult mergetool.<variant>.layout to determine the tool’s layout. If the variant-specific configuration is not available, vimdiff ' s is used as fallback. If that too is not available, a default layout with 4 windows will be used. To configure the layout, see the BACKEND SPECIFIC HINTS section in git-mergetool[1].
-
mergetool.hideResolved -
During a merge, Git will automatically resolve as many conflicts as possible and write the $MERGED file containing conflict markers around any conflicts that it cannot resolve; $LOCAL and $REMOTE normally are the versions of the file from before Git’s conflict resolution. This flag causes $LOCAL and $REMOTE to be overwritten so that only the unresolved conflicts are presented to the merge tool. Can be configured per-tool via the mergetool.<tool>.hideResolved configuration variable. Defaults to false.
-
mergetool.keepBackup -
After performing a merge, the original file with conflict markers can be saved as a file with a .orig extension. If this variable is set to false then this file is not preserved. Defaults to true (i.e. keep the backup files).
-
mergetool.keepTemporaries -
When invoking a custom merge tool, Git uses a set of temporary files to pass to the tool. If the tool returns an error and this variable is set to true, then these temporary files will be preserved; otherwise, they will be removed after the tool has exited. Defaults to false.
-
mergetool.writeToTemp -
Git writes temporary BASE, LOCAL, and REMOTE versions of conflicting files in the worktree by default. Git will attempt to use a temporary directory for these files when set true. Defaults to false.
-
mergetool.prompt -
Prompt before each invocation of the merge resolution program.
-
mergetool.guiDefault -
Set true to use the merge.guitool by default (equivalent to specifying the --gui argument), or auto to select merge.guitool or merge.tool depending on the presence of a DISPLAY environment variable value. The default is false, where the --gui argument must be provided explicitly for the merge.guitool to be used.
-
notes.mergeStrategy -
Which merge strategy to choose by default when resolving notes conflicts. Must be one of manual, ours, theirs, union, or cat_sort_uniq. Defaults to manual. See the "NOTES MERGE STRATEGIES" section of git-notes[1] for more information on each strategy.
This setting can be overridden by passing the --strategy option to git-notes[1].
-
notes.<name>.mergeStrategy -
Which merge strategy to choose when doing a notes merge into refs/notes/<name>. This overrides the more general notes.mergeStrategy. See the "NOTES MERGE STRATEGIES" section in git-notes[1] for more information on the available strategies.
-
notes.displayRef -
Which ref (or refs, if a glob or specified more than once), in addition to the default set by core.notesRef or GIT_NOTES_REF, to read notes from when showing commit messages with the git log family of commands.
This setting can be overridden with the GIT_NOTES_DISPLAY_REF environment variable, which must be a colon separated list of refs or globs.
A warning will be issued for refs that do not exist, but a glob that does not match any refs is silently ignored.
This setting can be disabled by the --no-notes option to the git-log[1] family of commands, or by the --notes=<ref> option accepted by those commands.
The effective value of core.notesRef (possibly overridden by GIT_NOTES_REF) is also implicitly added to the list of refs to be displayed.
-
notes.rewrite.<command> -
When rewriting commits with <command> (currently amend or rebase), if this variable is false, git will not copy notes from the original to the rewritten commit. Defaults to true. See also notes.rewriteRef below.
This setting can be overridden with the GIT_NOTES_REWRITE_REF environment variable, which must be a colon separated list of refs or globs.
-
notes.rewriteMode -
When copying notes during a rewrite (see the notes.rewrite.<command> option), determines what to do if the target commit already has a note. Must be one of overwrite, concatenate, cat_sort_uniq, or ignore. Defaults to concatenate.
This setting can be overridden with the GIT_NOTES_REWRITE_MODE environment variable.
-
notes.rewriteRef -
When copying notes during a rewrite, specifies the (fully qualified) ref whose notes should be copied. May be a glob, in which case notes in all matching refs will be copied. You may also specify this configuration several times.
Does not have a default value; you must configure this variable to enable note rewriting. Set it to refs/notes/commits to enable rewriting for the default commit notes.
Can be overridden with the GIT_NOTES_REWRITE_REF environment variable. See notes.rewrite.<command> above for a further description of its format.
-
pack.window
-
The size of the window used by git-pack-objects[1] when no window size is given on the command line. Defaults to 10.
-
pack.depth
-
The maximum delta depth used by git-pack-objects[1] when no maximum depth is given on the command line. Defaults to 50. Maximum value is 4095.
-
pack.windowMemory
-
The maximum size of memory that is consumed by each thread in git-pack-objects[1] for pack window memory when no limit is given on the command line. The value can be suffixed with "k", "m", or "g". When left unconfigured (or set explicitly to 0), there will be no limit.
-
pack.compression
-
An integer -1..9, indicating the compression level for objects 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, the zlib default, which is "a default compromise between speed and compression (currently equivalent to level 6)."
Note that changing the compression level will not automatically recompress all existing objects. You can force recompression by passing the -F option to git-repack[1].
-
pack.allowPackReuse
-
When true or "single", and when reachability bitmaps are enabled, pack-objects will try to send parts of the bitmapped packfile verbatim. When "multi", and when a multi-pack reachability bitmap is available, pack-objects will try to send parts of all packs in the MIDX.
If only a single pack bitmap is available, and pack.allowPackReuse is set to "multi", reuse parts of just the bitmapped packfile. This can reduce memory and CPU usage to serve fetches, but might result in sending a slightly larger pack. Defaults to true.
-
pack.island
-
An extended regular expression configuring a set of delta islands. See "DELTA ISLANDS" in git-pack-objects[1] for details.
-
pack.islandCore
-
Specify an island name which gets to have its objects be packed first. This creates a kind of pseudo-pack at the front of one pack, so that the objects from the specified island are hopefully faster to copy into any pack that should be served to a user requesting these objects. In practice this means that the island specified should likely correspond to what is the most commonly cloned in the repo. See also "DELTA ISLANDS" in git-pack-objects[1].
-
pack.deltaCacheSize
-
The maximum memory in bytes used for caching deltas in git-pack-objects[1] before writing them out to a pack. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Repacking large repositories on machines which are tight with memory might be badly impacted by this though, especially if this cache pushes the system into swapping. A value of 0 means no limit. The smallest size of 1 byte may be used to virtually disable this cache. Defaults to 256 MiB.
-
pack.deltaCacheLimit
-
The maximum size of a delta, that is cached in git-pack-objects[1]. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Defaults to 1000. Maximum value is 65535.
-
pack.threads
-
Specifies the number of threads to spawn when searching for best delta matches. This requires that git-pack-objects[1] be compiled with pthreads otherwise this option is ignored with a warning. This is meant to reduce packing time on multiprocessor machines. The required amount of memory for the delta search window is however multiplied by the number of threads. Specifying 0 will cause Git to auto-detect the number of CPUs and set the number of threads accordingly.
-
pack.indexVersion
-
Specify the default pack index version. Valid values are 1 for legacy pack index used by Git versions prior to 1.5.2, and 2 for the new pack index with capabilities for packs larger than 4 GB as well as proper protection against the repacking of corrupted packs. Version 2 is the default. Note that version 2 is enforced and this config option is ignored whenever the corresponding pack is larger than 2 GB.
If you have an old Git that does not understand the version 2 *.idx file, cloning or fetching over a non-native protocol (e.g. "http") that will copy both *.pack file and corresponding *.idx file from the other side may give you a repository that cannot be accessed with your older version of Git. If the *.pack file is smaller than 2 GB, however, you can use git-index-pack[1] on the *.pack file to regenerate the *.idx file.
-
pack.packSizeLimit
-
The maximum size of a pack. This setting only affects packing to a file when repacking, i.e. the git:// protocol is unaffected. It can be overridden by the --max-pack-size option of git-repack[1]. Reaching this limit results in the creation of multiple packfiles.
Note that this option is rarely useful, and may result in a larger total on-disk size (because Git will not store deltas between packs) and worse runtime performance (object lookup within multiple packs is slower than a single pack, and optimizations like reachability bitmaps cannot cope with multiple packs).
If you need to actively run Git using smaller packfiles (e.g., because your filesystem does not support large files), this option may help. But if your goal is to transmit a packfile over a medium that supports limited sizes (e.g., removable media that cannot store the whole repository), you are likely better off creating a single large packfile and splitting it using a generic multi-volume archive tool (e.g., Unix split).
The minimum size allowed is limited to 1 MiB. The default is unlimited. Common unit suffixes of k, m, or g are supported.
-
pack.useBitmaps
-
When true, git will use pack bitmaps (if available) when packing to stdout (e.g., during the server side of a fetch). Defaults to true. You should not generally need to turn this off unless you are debugging pack bitmaps.
-
pack.useBitmapBoundaryTraversal
-
When true, Git will use an experimental algorithm for computing reachability queries with bitmaps. Instead of building up complete bitmaps for all of the negated tips and then OR-ing them together, consider negated tips with existing bitmaps as additive (i.e. OR-ing them into the result if they exist, ignoring them otherwise), and build up a bitmap at the boundary instead.
When using this algorithm, Git may include too many objects as a result of not opening up trees belonging to certain UNINTERESTING commits. This inexactness matches the non-bitmap traversal algorithm.
In many cases, this can provide a speed-up over the exact algorithm, particularly when there is poor bitmap coverage of the negated side of the query.
-
pack.useSparse
-
When true, git will default to using the --sparse option in git pack-objects when the --revs option is present. This algorithm only walks trees that appear in paths that introduce new objects. This can have significant performance benefits when computing a pack to send a small change. However, it is possible that extra objects are added to the pack-file if the included commits contain certain types of direct renames. Default is true.
-
pack.usePathWalk
-
Enable the --path-walk option by default for git pack-objects processes. See git-pack-objects[1] for full details.
-
pack.preferBitmapTips
-
When selecting which commits will receive bitmaps, prefer a commit at the tip of any reference that is a suffix of any value of this configuration over any other commits in the "selection window".
Note that setting this configuration to refs/foo does not mean that the commits at the tips of refs/foo/bar and refs/foo/baz will necessarily be selected. This is because commits are selected for bitmaps from within a series of windows of variable length.
If a commit at the tip of any reference which is a suffix of any value of this configuration is seen in a window, it is immediately given preference over any other commit in that window.
-
pack.writeBitmaps (deprecated)
-
This is a deprecated synonym for repack.writeBitmaps.
-
pack.writeBitmapHashCache
-
When true, git will include a "hash cache" section in the bitmap index (if one is written). This cache can be used to feed git’s delta heuristics, potentially leading to better deltas between bitmapped and non-bitmapped objects (e.g., when serving a fetch between an older, bitmapped pack and objects that have been pushed since the last gc). The downside is that it consumes 4 bytes per object of disk space. Defaults to true.
When writing a multi-pack reachability bitmap, no new namehashes are computed; instead, any namehashes stored in an existing bitmap are permuted into their appropriate location when writing a new bitmap.
-
pack.writeBitmapLookupTable
-
When true, Git will include a "lookup table" section in the bitmap index (if one is written). This table is used to defer loading individual bitmaps as late as possible. This can be beneficial in repositories that have relatively large bitmap indexes. Defaults to false.
-
pack.readReverseIndex
-
When true, git will read any .rev file(s) that may be available (see: gitformat-pack[5]). When false, the reverse index will be generated from scratch and stored in memory. Defaults to true.
-
pack.writeReverseIndex
-
When true, git will write a corresponding .rev file (see: gitformat-pack[5]) for each new packfile that it writes in all places except for git-fast-import[1] and in the bulk checkin mechanism. Defaults to true.
-
If the value is boolean, turns on or off pagination of the output of a particular Git subcommand when writing to a tty. Otherwise, turns on pagination for the subcommand using the pager specified by the value of pager.<cmd>. If --paginate or --no-pager is specified on the command line, it takes precedence over this option. To disable pagination for all commands, set core.pager or GIT_PAGER to cat.
-
pretty.<name>
-
Alias for a --pretty= format string, as specified in git-log[1]. Any aliases defined here can be used just as the built-in pretty formats could. For example, running git config pretty.changelog "format:* %H %s" would cause the invocation git log --pretty=changelog to be equivalent to running git log "--pretty=format:* %H %s". Note that an alias with the same name as a built-in format will be silently ignored.
-
promisor.quiet
-
If set to "true" assume --quiet when fetching additional objects for a partial clone.
-
promisor.advertise
-
If set to "true", a server will use the "promisor-remote" capability, see gitprotocol-v2[5], to advertise the promisor remotes it is using, if it uses some. Default is "false", which means the "promisor-remote" capability is not advertised.
-
promisor.sendFields
-
A comma or space separated list of additional remote related field names. A server sends these field names and the associated field values from its configuration when advertising its promisor remotes using the "promisor-remote" capability, see gitprotocol-v2[5]. Currently, only the "partialCloneFilter" and "token" field names are supported.
-
partialCloneFilter -
contains the partial clone filter used for the remote.
-
token -
contains an authentication token for the remote.
When a field name is part of this list and a corresponding "remote.foo.<field-name>" config variable is set on the server to a non-empty value, then the field name and value are sent when advertising the promisor remote "foo".
This list has no effect unless the "promisor.advertise" config variable is set to "true", and the "name" and "url" fields are always advertised regardless of this setting.
-
promisor.acceptFromServer
-
If set to "all", a client will accept all the promisor remotes a server might advertise using the "promisor-remote" capability. If set to "knownName" the client will accept promisor remotes which are already configured on the client and have the same name as those advertised by the client. This is not very secure, but could be used in a corporate setup where servers and clients are trusted to not switch name and URLs. If set to "knownUrl", the client will accept promisor remotes which have both the same name and the same URL configured on the client as the name and URL advertised by the server. This is more secure than "all" or "knownName", so it should be used if possible instead of those options. Default is "none", which means no promisor remote advertised by a server will be accepted. By accepting a promisor remote, the client agrees that the server might omit objects that are lazily fetchable from this promisor remote from its responses to "fetch" and "clone" requests from the client. Name and URL comparisons are case sensitive. See gitprotocol-v2[5].
-
promisor.checkFields
-
A comma or space separated list of additional remote related field names. A client checks if the values of these fields transmitted by a server correspond to the values of these fields in its own configuration before accepting a promisor remote. Currently, "partialCloneFilter" and "token" are the only supported field names.
If one of these field names (e.g., "token") is being checked for an advertised promisor remote (e.g., "foo"), three conditions must be met for the check of this specific field to pass:
-
The corresponding local configuration (e.g., remote.foo.token) must be set.
-
The server must advertise the "token" field for remote "foo".
-
The value of the locally configured remote.foo.token must exactly match the value advertised by the server for the "token" field.
If any of these conditions is not met for any field name listed in promisor.checkFields, the advertised remote "foo" is rejected.
For the "partialCloneFilter" field, this allows the client to ensure that the server’s filter matches what it expects locally, preventing inconsistencies in filtering behavior. For the "token" field, this can be used to verify that authentication credentials match expected values.
Field values are compared case-sensitively.
The "name" and "url" fields are always checked according to the promisor.acceptFromServer policy, independently of this setting.
The field names and values should be passed by the server through the "promisor-remote" capability by using the promisor.sendFields config variable. The fields are checked only if the promisor.acceptFromServer config variable is not set to "None". If set to "None", this config variable has no effect. See gitprotocol-v2[5].
-
protocol.allow
-
If set, provide a user defined default policy for all protocols which don’t explicitly have a policy (protocol.<name>.allow). By default, if unset, known-safe protocols (http, https, git, ssh) have a default policy of always, known-dangerous protocols (ext) have a default policy of never, and all other protocols (including file) have a default policy of user. Supported policies:
-
always - protocol is always able to be used.
-
never - protocol is never able to be used.
-
user - protocol is only able to be used when GIT_PROTOCOL_FROM_USER is either unset or has a value of 1. This policy should be used when you want a protocol to be directly usable by the user but don’t want it used by commands which execute clone/fetch/push commands without user input, e.g. recursive submodule initialization.
-
protocol.<name>.allow
-
Set a policy to be used by protocol <name> with clone/fetch/push commands. See protocol.allow above for the available policies.
The protocol names currently used by git are:
-
file: any local file-based path (including file:// URLs, or local paths)
-
git: the anonymous git protocol over a direct TCP connection (or proxy, if configured)
-
ssh: git over ssh (including host:path syntax, ssh://, etc).
-
http: git over http, both "smart http" and "dumb http". Note that this does not include https; if you want to configure both, you must do so individually.
-
any external helpers are named by their protocol (e.g., use hg to allow the git-remote-hg helper)
-
protocol.version
-
If set, clients will attempt to communicate with a server using the specified protocol version. If the server does not support it, communication falls back to version 0. If unset, the default is 2. Supported versions:
-
0 - the original wire protocol.
-
1 - the original wire protocol with the addition of a version string in the initial response from the server.
-
2 - Wire protocol version 2, see gitprotocol-v2[5].
-
pull.ff
-
By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to false, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the --no-ff option from the command line). When set to only, only such fast-forward merges are allowed (equivalent to giving the --ff-only option from the command line). This setting overrides merge.ff when pulling.
-
pull.rebase
-
When true, rebase branches on top of the fetched branch, instead of merging the default branch from the default remote when "git pull" is run. See "branch.<name>.rebase" for setting this on a per-branch basis.
When merges (or just m), pass the --rebase-merges option to git rebase so that the local merge commits are included in the rebase (see git-rebase[1] for details).
When the value is interactive (or just i), the rebase is run in interactive mode.
NOTE: this is a possibly dangerous operation; do not use it unless you understand the implications (see git-rebase[1] for details).
-
pull.octopus
-
The default merge strategy to use when pulling multiple branches at once.
-
pull.autoStash
-
When set to true, automatically create a temporary stash entry to record the local changes before the operation begins, and restore them after the operation completes. When your "git pull" rebases (instead of merges), this may be convenient, since unlike merging pull that tolerates local changes that do not interfere with the merge, rebasing pull refuses to work with any local changes.
If pull.autostash is set (either to true or false), merge.autostash and rebase.autostash are ignored. If pull.autostash is not set at all, depending on the value of pull.rebase, merge.autostash or rebase.autostash is used instead. Can be overridden by the --[no-]autostash command line option.
-
pull.twohead
-
The default merge strategy to use when pulling a single branch.
-
push.autoSetupRemote -
If set to true assume --set-upstream on default push when no upstream tracking exists for the current branch; this option takes effect with push.default options simple, upstream, and current. It is useful if by default you want new branches to be pushed to the default remote (like the behavior of push.default=current) and you also want the upstream tracking to be set. Workflows most likely to benefit from this option are simple central workflows where all branches are expected to have the same name on the remote.
-
push.default -
Defines the action git push should take if no refspec is given (whether from the command-line, config, or elsewhere). Different values are well-suited for specific workflows; for instance, in a purely central workflow (i.e. the fetch source is equal to the push destination), upstream is probably what you want. Possible values are:
-
nothing -
do not push anything (error out) unless a refspec is given. This is primarily meant for people who want to avoid mistakes by always being explicit.
-
current -
push the current branch to update a branch with the same name on the receiving end. Works in both central and non-central workflows.
-
upstream -
push the current branch back to the branch whose changes are usually integrated into the current branch (which is called @{upstream}). This mode only makes sense if you are pushing to the same repository you would normally pull from (i.e. central workflow).
-
tracking -
this is a deprecated synonym for upstream.
-
simple -
push the current branch with the same name on the remote.
If you are working on a centralized workflow (pushing to the same repository you pull from, which is typically origin), then you need to configure an upstream branch with the same name.
This mode is the default since Git 2.0, and is the safest option suited for beginners.
-
matching -
push all branches having the same name on both ends. This makes the repository you are pushing to remember the set of branches that will be pushed out (e.g. if you always push maint and master there and no other branches, the repository you push to will have these two branches, and your local maint and master will be pushed there).
To use this mode effectively, you have to make sure all the branches you would push out are ready to be pushed out before running git push, as the whole point of this mode is to allow you to push all of the branches in one go. If you usually finish work on only one branch and push out the result, while other branches are unfinished, this mode is not for you. Also this mode is not suitable for pushing into a shared central repository, as other people may add new branches there, or update the tip of existing branches outside your control.
This used to be the default, but not since Git 2.0 (simple is the new default).
-
push.followTags -
If set to true, enable --follow-tags option by default. You may override this configuration at time of push by specifying --no-follow-tags.
-
push.gpgSign -
May be set to a boolean value, or the string if-asked. A true value causes all pushes to be GPG signed, as if --signed is passed to git-push[1]. The string if-asked causes pushes to be signed if the server supports it, as if --signed=if-asked is passed to git push. A false value may override a value from a lower-priority config file. An explicit command-line flag always overrides this config option.
-
push.pushOption -
When no --push-option=<option> argument is given from the command line, git push behaves as if each <option> of this variable is given as --push-option=<option>.
This is a multi-valued variable, and an empty value can be used in a higher priority configuration file (e.g. .git/config in a repository) to clear the values inherited from a lower priority configuration files (e.g. $HOME/.gitconfig).
Example:
/etc/gitconfig
push.pushoption = a
push.pushoption = b
~/.gitconfig
push.pushoption = c
repo/.git/config
push.pushoption =
push.pushoption = b
This will result in only b (a and c are cleared).
-
push.recurseSubmodules -
May be check, on-demand, only, or no, with the same behavior as that of push --recurse-submodules. If not set, no is used by default, unless submodule.recurse is set (in which case a true value means on-demand).
-
push.useForceIfIncludes -
If set to true, it is equivalent to specifying --force-if-includes as an option to git-push[1] in the command line. Adding --no-force-if-includes at the time of push overrides this configuration setting.
-
push.negotiate -
If set to true, attempt to reduce the size of the packfile sent by rounds of negotiation in which the client and the server attempt to find commits in common. If false, Git will rely solely on the server’s ref advertisement to find commits in common.
-
push.useBitmaps -
If set to false, disable use of bitmaps for git push even if pack.useBitmaps is true, without preventing other git operations from using bitmaps. Default is true.
-
rebase.backend
-
Default backend to use for rebasing. Possible choices are apply or merge. In the future, if the merge backend gains all remaining capabilities of the apply backend, this setting may become unused.
-
rebase.stat
-
Whether to show a diffstat of what changed upstream since the last rebase. False by default.
-
rebase.autoSquash
-
If set to true, enable the --autosquash option of git-rebase[1] by default for interactive mode. This can be overridden with the --no-autosquash option.
-
rebase.autoStash
-
When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run rebase on a dirty worktree. However, use with care: the final stash application after a successful rebase might result in non-trivial conflicts. This option can be overridden by the --no-autostash and --autostash options of git-rebase[1]. Defaults to false.
-
rebase.updateRefs
-
If set to true enable --update-refs option by default.
-
rebase.missingCommitsCheck
-
If set to "warn", git rebase -i will print a warning if some commits are removed (e.g. a line was deleted), however the rebase will still proceed. If set to "error", it will print the previous warning and stop the rebase, git rebase --edit-todo can then be used to correct the error. If set to "ignore", no checking is done. To drop a commit without warning or error, use the drop command in the todo list. Defaults to "ignore".
-
rebase.instructionFormat
-
A format string, as specified in git-log[1], to be used for the todo list during an interactive rebase. The format will automatically have the commit hash prepended to the format.
-
rebase.abbreviateCommands
-
If set to true, git rebase will use abbreviated command names in the todo list resulting in something like this:
p deadbee The oneline of the commit
p fa1afe1 The oneline of the next commit
... instead of:
pick deadbee The oneline of the commit
pick fa1afe1 The oneline of the next commit
... Defaults to false.
-
rebase.rescheduleFailedExec
-
Automatically reschedule exec commands that failed. This only makes sense in interactive mode (or when an --exec option was provided). This is the same as specifying the --reschedule-failed-exec option.
-
rebase.forkPoint
-
If set to false set --no-fork-point option by default.
-
rebase.rebaseMerges
-
Whether and how to set the --rebase-merges option by default. Can be rebase-cousins, no-rebase-cousins, or a boolean. Setting to true or to no-rebase-cousins is equivalent to --rebase-merges=no-rebase-cousins, setting to rebase-cousins is equivalent to --rebase-merges=rebase-cousins, and setting to false is equivalent to --no-rebase-merges. Passing --rebase-merges on the command line, with or without an argument, overrides any rebase.rebaseMerges configuration.
-
rebase.maxLabelLength
-
When generating label names from commit subjects, truncate the names to this length. By default, the names are truncated to a little less than NAME_MAX (to allow e.g. .lock files to be written for the corresponding loose refs).
-
receive.advertiseAtomic
-
By default, git-receive-pack will advertise the atomic push capability to its clients. If you don’t want to advertise this capability, set this variable to false.
-
receive.advertisePushOptions
-
When set to true, git-receive-pack will advertise the push options capability to its clients. False by default.
-
receive.autogc
-
By default, git-receive-pack will run "git maintenance run --auto" after receiving data from git-push and updating refs. You can stop it by setting this variable to false.
-
receive.certNonceSeed
-
By setting this variable to a string, git receive-pack will accept a git push --signed and verify it by using a "nonce" protected by HMAC using this string as a secret key.
-
receive.certNonceSlop
-
When a git push --signed sends a push certificate with a "nonce" that was issued by a receive-pack serving the same repository within this many seconds, export the "nonce" found in the certificate to GIT_PUSH_CERT_NONCE to the hooks (instead of what the receive-pack asked the sending side to include). This may allow writing checks in pre-receive and post-receive a bit easier. Instead of checking GIT_PUSH_CERT_NONCE_SLOP environment variable that records by how many seconds the nonce is stale to decide if they want to accept the certificate, they only can check GIT_PUSH_CERT_NONCE_STATUS is OK.
-
receive.fsckObjects
-
If it is set to true, git-receive-pack will check all received objects. See transfer.fsckObjects for what’s checked. Defaults to false. If not set, the value of transfer.fsckObjects is used instead.
-
receive.fsck.<msg-id>
-
Acts like fsck.<msg-id>, but is used by git-receive-pack[1] instead of git-fsck[1]. See the fsck.<msg-id> documentation for details.
-
receive.fsck.skipList
-
Acts like fsck.skipList, but is used by git-receive-pack[1] instead of git-fsck[1]. See the fsck.skipList documentation for details.
-
receive.keepAlive
-
After receiving the pack from the client, receive-pack may produce no output (if --quiet was specified) while processing the pack, causing some networks to drop the TCP connection. With this option set, if receive-pack does not transmit any data in this phase for receive.keepAlive seconds, it will send a short keepalive packet. The default is 5 seconds; set to 0 to disable keepalives entirely.
-
receive.unpackLimit
-
If the number of objects received in a push is below this limit then the objects will be unpacked into loose object files. However if the number of received objects equals or exceeds this limit then the received pack will be stored as a pack, after adding any missing delta bases. Storing the pack from a push can make the push operation complete faster, especially on slow filesystems. If not set, the value of transfer.unpackLimit is used instead.
-
receive.maxInputSize
-
If the size of the incoming pack stream is larger than this limit, then git-receive-pack will error out, instead of accepting the pack file. If not set or set to 0, then the size is unlimited.
-
receive.denyDeletes
-
If set to true, git-receive-pack will deny a ref update that deletes the ref. Use this to prevent such a ref deletion via a push.
-
receive.denyDeleteCurrent
-
If set to true, git-receive-pack will deny a ref update that deletes the currently checked out branch of a non-bare repository.
-
receive.denyCurrentBranch
-
If set to true or "refuse", git-receive-pack will deny a ref update to the currently checked out branch of a non-bare repository. Such a push is potentially dangerous because it brings the HEAD out of sync with the index and working tree. If set to "warn", print a warning of such a push to stderr, but allow the push to proceed. If set to false or "ignore", allow such pushes with no message. Defaults to "refuse".
Another option is "updateInstead" which will update the working tree if pushing into the current branch. This option is intended for synchronizing working directories when one side is not easily accessible via interactive ssh (e.g. a live web site, hence the requirement that the working directory be clean). This mode also comes in handy when developing inside a VM to test and fix code on different Operating Systems.
By default, "updateInstead" will refuse the push if the working tree or the index have any difference from the HEAD, but the push-to-checkout hook can be used to customize this. See githooks[5].
-
receive.denyNonFastForwards
-
If set to true, git-receive-pack will deny a ref update which is not a fast-forward. Use this to prevent such an update via a push, even if that push is forced. This configuration variable is set when initializing a shared repository.
-
receive.hideRefs
-
This variable is the same as transfer.hideRefs, but applies only to receive-pack (and so affects pushes, but not fetches). An attempt to update or delete a hidden ref by git push is rejected.
-
receive.procReceiveRefs
-
This is a multi-valued variable that defines reference prefixes to match the commands in receive-pack. Commands matching the prefixes will be executed by an external hook "proc-receive", instead of the internal execute_commands function. If this variable is not defined, the "proc-receive" hook will never be used, and all commands will be executed by the internal execute_commands function.
For example, if this variable is set to "refs/for", pushing to reference such as "refs/for/master" will not create or update a reference named "refs/for/master", but may create or update a pull request directly by running the hook "proc-receive".
Optional modifiers can be provided in the beginning of the value to filter commands for specific actions: create (a), modify (m), delete (d). A ! can be included in the modifiers to negate the reference prefix entry. E.g.:
git config --system --add receive.procReceiveRefs ad:refs/heads
git config --system --add receive.procReceiveRefs !:refs/heads
-
receive.updateServerInfo
-
If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs.
-
receive.shallowUpdate
-
If set to true, .git/shallow can be updated when new refs require new shallow roots. Otherwise those refs are rejected.
-
reftable.blockSize
-
The size in bytes used by the reftable backend when writing blocks. The block size is determined by the writer, and does not have to be a power of 2. The block size must be larger than the longest reference name or log entry used in the repository, as references cannot span blocks.
Powers of two that are friendly to the virtual memory system or filesystem (such as 4kB or 8kB) are recommended. Larger sizes (64kB) can yield better compression, with a possible increased cost incurred by readers during access.
The largest block size is 16777215 bytes (15.99 MiB). The default value is 4096 bytes (4kB). A value of 0 will use the default value.
-
reftable.restartInterval
-
The interval at which to create restart points. The reftable backend determines the restart points at file creation. Every 16 may be more suitable for smaller block sizes (4k or 8k), every 64 for larger block sizes (64k).
More frequent restart points reduces prefix compression and increases space consumed by the restart table, both of which increase file size.
Less frequent restart points makes prefix compression more effective, decreasing overall file size, with increased penalties for readers walking through more records after the binary search step.
A maximum of 65535 restart points per block is supported.
The default value is to create restart points every 16 records. A value of 0 will use the default value.
-
reftable.indexObjects
-
Whether the reftable backend shall write object blocks. Object blocks are a reverse mapping of object ID to the references pointing to them.
The default value is true.
-
reftable.geometricFactor
-
Whenever the reftable backend appends a new table to the stack, it performs auto compaction to ensure that there is only a handful of tables. The backend does this by ensuring that tables form a geometric sequence regarding the respective sizes of each table.
By default, the geometric sequence uses a factor of 2, meaning that for any table, the next-biggest table must at least be twice as big. A maximum factor of 256 is supported.
-
reftable.lockTimeout
-
Whenever the reftable backend appends a new table to the stack, it has to lock the central "tables.list" file before updating it. This config controls how long the process will wait to acquire the lock in case another process has already acquired it. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 100 (i.e., retry for 100ms).
-
remote.pushDefault
-
The remote to push to by default. Overrides branch.<name>.remote for all branches, and is overridden by branch.<name>.pushRemote for specific branches.
-
remote.<name>.url
-
The URL of a remote repository. See git-fetch[1] or git-push[1]. A configured remote can have multiple URLs; in this case the first is used for fetching, and all are used for pushing (assuming no remote.<name>.pushurl is defined). Setting this key to the empty string clears the list of urls, allowing you to override earlier config.
-
remote.<name>.pushurl
-
The push URL of a remote repository. See git-push[1]. If a pushurl option is present in a configured remote, it is used for pushing instead of remote.<name>.url. A configured remote can have multiple push URLs; in this case a push goes to all of them. Setting this key to the empty string clears the list of urls, allowing you to override earlier config.
-
remote.<name>.proxy
-
For remotes that require curl (http, https and ftp), the URL to the proxy to use for that remote. Set to the empty string to disable proxying for that remote.
-
remote.<name>.proxyAuthMethod
-
For remotes that require curl (http, https and ftp), the method to use for authenticating against the proxy in use (probably set in remote.<name>.proxy). See http.proxyAuthMethod.
-
remote.<name>.fetch
-
The default set of "refspec" for git-fetch[1]. See git-fetch[1].
-
remote.<name>.push
-
The default set of "refspec" for git-push[1]. See git-push[1].
-
remote.<name>.mirror
-
If true, pushing to this remote will automatically behave as if the --mirror option was given on the command line.
-
remote.<name>.skipDefaultUpdate
-
A deprecated synonym to remote.<name>.skipFetchAll (if both are set in the configuration files with different values, the value of the last occurrence will be used).
-
remote.<name>.skipFetchAll
-
If true, this remote will be skipped when updating using git-fetch[1], the update subcommand of git-remote[1], and ignored by the prefetch task of git maintenance.
-
remote.<name>.receivepack
-
The default program to execute on the remote side when pushing. See option --receive-pack of git-push[1].
-
remote.<name>.uploadpack
-
The default program to execute on the remote side when fetching. See option --upload-pack of git-fetch-pack[1].
-
remote.<name>.tagOpt
-
Setting this value to --no-tags disables automatic tag following when fetching from remote <name>. Setting it to --tags will fetch every tag from remote <name>, even if they are not reachable from remote branch heads. Passing these flags directly to git-fetch[1] can override this setting. See options --tags and --no-tags of git-fetch[1].
-
remote.<name>.vcs
-
Setting this to a value <vcs> will cause Git to interact with the remote with the git-remote-<vcs> helper.
-
remote.<name>.prune
-
When set to true, fetching from this remote by default will also remove any remote-tracking references that no longer exist on the remote (as if the --prune option was given on the command line). Overrides fetch.prune settings, if any.
-
remote.<name>.pruneTags
-
When set to true, fetching from this remote by default will also remove any local tags that no longer exist on the remote if pruning is activated in general via remote.<name>.prune, fetch.prune or --prune. Overrides fetch.pruneTags settings, if any.
See also remote.<name>.prune and the PRUNING section of git-fetch[1].
-
remote.<name>.promisor
-
When set to true, this remote will be used to fetch promisor objects.
-
remote.<name>.partialclonefilter
-
The filter that will be applied when fetching from this promisor remote. Changing or clearing this value will only affect fetches for new commits. To fetch associated objects for commits already present in the local object database, use the --refetch option of git-fetch[1].
-
remote.<name>.serverOption
-
The default set of server options used when fetching from this remote. These server options can be overridden by the --server-option= command line arguments.
This is a multi-valued variable, and an empty value can be used in a higher priority configuration file (e.g. .git/config in a repository) to clear the values inherited from a lower priority configuration files (e.g. $HOME/.gitconfig).
-
remote.<name>.followRemoteHEAD
-
How git-fetch[1] should handle updates to remotes/<name>/HEAD when fetching using the configured refspecs of a remote. The default value is "create", which will create remotes/<name>/HEAD if it exists on the remote, but not locally; this will not touch an already existing local reference. Setting it to "warn" will print a message if the remote has a different value than the local one; in case there is no local reference, it behaves like "create". A variant on "warn" is "warn-if-not-$branch", which behaves like "warn", but if HEAD on the remote is $branch it will be silent. Setting it to "always" will silently update remotes/<name>/HEAD to the value on the remote. Finally, setting it to "never" will never change or create the local reference.
-
remotes.<group>
-
The list of remotes which are fetched by "git remote update <group>". See git-remote[1].
-
repack.useDeltaBaseOffset
-
By default, git-repack[1] creates packs that use delta-base offset. If you need to share your repository with Git older than version 1.4.4, either directly or via a dumb protocol such as http, then you need to set this option to "false" and repack. Access from old Git versions over the native protocol are unaffected by this option.
-
repack.packKeptObjects
-
If set to true, makes git repack act as if --pack-kept-objects was passed. See git-repack[1] for details. Defaults to false normally, but true if a bitmap index is being written (either via --write-bitmap-index or repack.writeBitmaps).
-
repack.useDeltaIslands
-
If set to true, makes git repack act as if --delta-islands was passed. Defaults to false.
-
repack.writeBitmaps
-
When true, git will write a bitmap index when packing all objects to disk (e.g., when git repack -a is run). This index can speed up the "counting objects" phase of subsequent packs created for clones and fetches, at the cost of some disk space and extra time spent on the initial repack. This has no effect if multiple packfiles are created. Defaults to true on bare repos, false otherwise.
-
repack.updateServerInfo
-
If set to false, git-repack[1] will not run git-update-server-info[1]. Defaults to true. Can be overridden when true by the -n option of git-repack[1].
-
repack.cruftWindow
-
repack.cruftWindowMemory
-
repack.cruftDepth
-
repack.cruftThreads
-
Parameters used by git-pack-objects[1] when generating a cruft pack and the respective parameters are not given over the command line. See similarly named pack.* configuration variables for defaults and meaning.
-
repack.midxMustContainCruft
-
When set to true, git-repack[1] will unconditionally include cruft pack(s), if any, in the multi-pack index when invoked with --write-midx. When false, cruft packs are only included in the MIDX when necessary (e.g., because they might be required to form a reachability closure with MIDX bitmaps). Defaults to true.
-
rerere.autoUpdate
-
When set to true, git-rerere updates the index with the resulting contents after it cleanly resolves conflicts using previously recorded resolutions. Defaults to false.
-
rerere.enabled
-
Activate recording of resolved conflicts, so that identical conflict hunks can be resolved automatically, should they be encountered again. By default, git-rerere[1] is enabled if there is an rr-cache directory under the $GIT_DIR, e.g. if "rerere" was previously used in the repository.
-
revert.reference
-
Setting this variable to true makes git revert behave as if the --reference option is given.
-
safe.bareRepository
-
Specifies which bare repositories Git will work with. The currently supported values are:
-
all: Git works with all bare repositories. This is the default.
-
explicit: Git only works with bare repositories specified via the top-level --git-dir command-line option, or the GIT_DIR environment variable (see git[1]).
If you do not use bare repositories in your workflow, then it may be beneficial to set safe.bareRepository to explicit in your global config. This will protect you from attacks that involve cloning a repository that contains a bare repository and running a Git command within that directory.
This config setting is only respected in protected configuration (see SCOPES). This prevents untrusted repositories from tampering with this value.
-
safe.directory
-
These config entries specify Git-tracked directories that are considered safe even if they are owned by someone other than the current user. By default, Git will refuse to even parse a Git config of a repository owned by someone else, let alone run its hooks, and this config setting allows users to specify exceptions, e.g. for intentionally shared repositories (see the --shared option in git-init[1]).
This is a multi-valued setting, i.e. you can add more than one directory via git config --add. To reset the list of safe directories (e.g. to override any such directories specified in the system config), add a safe.directory entry with an empty value.
This config setting is only respected in protected configuration (see SCOPES). This prevents untrusted repositories from tampering with this value.
The value of this setting is interpolated, i.e. ~/<path> expands to a path relative to the home directory and %(prefix)/<path> expands to a path relative to Git’s (runtime) prefix.
To completely opt-out of this security check, set safe.directory to the string *. This will allow all repositories to be treated as if their directory was listed in the safe.directory list. If safe.directory=* is set in system config and you want to re-enable this protection, then initialize your list with an empty value before listing the repositories that you deem safe. Giving a directory with /* appended to it will allow access to all repositories under the named directory.
As explained, Git only allows you to access repositories owned by yourself, i.e. the user who is running Git, by default. When Git is running as root in a non Windows platform that provides sudo, however, git checks the SUDO_UID environment variable that sudo creates and will allow access to the uid recorded as its value in addition to the id from root. This is to make it easy to perform a common sequence during installation "make && sudo make install". A git process running under sudo runs as root but the sudo command exports the environment variable to record which id the original user has. If that is not what you would prefer and want git to only trust repositories that are owned by root instead, then you can remove the SUDO_UID variable from root’s environment before invoking git.
-
sendemail.identity
-
A configuration identity. When given, causes values in the sendemail.<identity> subsection to take precedence over values in the sendemail section. The default identity is the value of sendemail.identity.
-
sendemail.smtpEncryption
-
See git-send-email[1] for description. Note that this setting is not subject to the identity mechanism.
-
sendemail.smtpSSLCertPath
-
Path to ca-certificates (either a directory or a single file). Set it to an empty string to disable certificate verification.
-
sendemail.<identity>.*
-
Identity-specific versions of the sendemail.* parameters found below, taking precedence over those when this identity is selected, through either the command-line or sendemail.identity.
-
sendemail.multiEdit
-
If true (default), a single editor instance will be spawned to edit files you have to edit (patches when --annotate is used, and the summary when --compose is used). If false, files will be edited one after the other, spawning a new editor each time.
-
sendemail.confirm
-
Sets the default for whether to confirm before sending. Must be one of always, never, cc, compose, or auto. See --confirm in the git-send-email[1] documentation for the meaning of these values.
-
sendemail.mailmap
-
If true, makes git-send-email[1] assume --mailmap, otherwise assume --no-mailmap. False by default.
-
sendemail.mailmap.file
-
The location of a git-send-email[1] specific augmenting mailmap file. The default mailmap and mailmap.file are loaded first. Thus, entries in this file take precedence over entries in the default mailmap locations. See gitmailmap[5].
-
sendemail.mailmap.blob
-
Like sendemail.mailmap.file, but consider the value as a reference to a blob in the repository. Entries in sendemail.mailmap.file take precedence over entries here. See gitmailmap[5].
-
sendemail.aliasesFile
-
To avoid typing long email addresses, point this to one or more email aliases files. You must also supply sendemail.aliasFileType.
-
sendemail.aliasFileType
-
Format of the file(s) specified in sendemail.aliasesFile. Must be one of mutt, mailrc, pine, elm, gnus, or sendmail.
What an alias file in each format looks like can be found in the documentation of the email program of the same name. The differences and limitations from the standard formats are described below:
-
sendmail
-
-
Quoted aliases and quoted addresses are not supported: lines that contain a " symbol are ignored.
-
Redirection to a file (/path/name) or pipe (|command) is not supported.
-
File inclusion (:include: /path/name) is not supported.
-
Warnings are printed on the standard error output for any explicitly unsupported constructs, and any other lines that are not recognized by the parser.
-
sendemail.annotate
-
sendemail.bcc
-
sendemail.cc
-
sendemail.ccCmd
-
sendemail.chainReplyTo
-
sendemail.envelopeSender
-
sendemail.from
-
sendemail.signedOffByCc
-
sendemail.smtpPass
-
sendemail.suppressCc
-
sendemail.suppressFrom
-
sendemail.to
-
sendemail.toCmd
-
sendemail.smtpDomain
-
sendemail.smtpServer
-
sendemail.smtpServerPort
-
sendemail.smtpServerOption
-
sendemail.smtpUser
-
sendemail.imapSentFolder
-
sendemail.useImapOnly
-
sendemail.thread
-
sendemail.transferEncoding
-
sendemail.validate
-
sendemail.xmailer
-
These configuration variables all provide a default for git-send-email[1] command-line options. See its documentation for details.
-
sendemail.outlookidfix
-
If true, makes git-send-email[1] assume --outlook-id-fix, and if false assume --no-outlook-id-fix. If not specified, it will behave the same way as if --outlook-id-fix is not specified.
-
sendemail.signedOffCc (deprecated)
-
Deprecated alias for sendemail.signedOffByCc.
-
sendemail.smtpBatchSize
-
Number of messages to be sent per connection, after that a relogin will happen. If the value is 0 or undefined, send all messages in one connection. See also the --batch-size option of git-send-email[1].
-
sendemail.smtpReloginDelay
-
Seconds to wait before reconnecting to the smtp server. See also the --relogin-delay option of git-send-email[1].
-
sendemail.forbidSendmailVariables
-
To avoid common misconfiguration mistakes, git-send-email[1] will abort with a warning if any configuration options for sendmail exist. Set this variable to bypass the check.
-
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.
-
showBranch.default
-
The default set of branches for git-show-branch[1]. See git-show-branch[1].
-
sparse.expectFilesOutsideOfPatterns
-
Typically with sparse checkouts, files not matching any sparsity patterns are marked with a SKIP_WORKTREE bit in the index and are missing from the working tree. Accordingly, Git will ordinarily check whether files with the SKIP_WORKTREE bit are in fact present in the working tree contrary to expectations. If Git finds any, it marks those paths as present by clearing the relevant SKIP_WORKTREE bits. This option can be used to tell Git that such present-despite-skipped files are expected and to stop checking for them.
The default is false, which allows Git to automatically recover from the list of files in the index and working tree falling out of sync.
Set this to true if you are in a setup where some external factor relieves Git of the responsibility for maintaining the consistency between the presence of working tree files and sparsity patterns. For example, if you have a Git-aware virtual file system that has a robust mechanism for keeping the working tree and the sparsity patterns up to date based on access patterns.
Regardless of this setting, Git does not check for present-despite-skipped files unless sparse checkout is enabled, so this config option has no effect unless core.sparseCheckout is true.
-
splitIndex.maxPercentChange
-
When the split index feature is used, this specifies the percent of entries the split index can contain compared to the total number of entries in both the split index and the shared index before a new shared index is written. The value should be between 0 and 100. If the value is 0, then a new shared index is always written; if it is 100, a new shared index is never written. By default, the value is 20, so a new shared index is written if the number of entries in the split index would be greater than 20 percent of the total number of entries. See git-update-index[1].
-
splitIndex.sharedIndexExpire
-
When the split index feature is used, shared index files that were not modified since the time this variable specifies will be removed when a new shared index file is created. The value "now" expires all entries immediately, and "never" suppresses expiration altogether. The default value is "2.weeks.ago". Note that a shared index file is considered modified (for the purpose of expiration) each time a new split-index file is either created based on it or read from it. See git-update-index[1].
-
ssh.variant
-
By default, Git determines the command line arguments to use based on the basename of the configured SSH command (configured using the environment variable GIT_SSH or GIT_SSH_COMMAND or the config setting core.sshCommand). If the basename is unrecognized, Git will attempt to detect support of OpenSSH options by first invoking the configured SSH command with the -G (print configuration) option and will subsequently use OpenSSH options (if that is successful) or no options besides the host and remote command (if it fails).
The config variable ssh.variant can be set to override this detection. Valid values are ssh (to use OpenSSH options), plink, putty, tortoiseplink, simple (no options except the host and remote command). The default auto-detection can be explicitly requested using the value auto. Any other value is treated as ssh. This setting can also be overridden via the environment variable GIT_SSH_VARIANT.
The current command-line parameters used for each variant are as follows:
-
ssh - [-p port] [-4] [-6] [-o option] [username@]host command
-
simple - [username@]host command
-
plink or putty - [-P port] [-4] [-6] [username@]host command
-
tortoiseplink - [-P port] [-4] [-6] -batch [username@]host command
Except for the simple variant, command-line parameters are likely to change as git gains new features.