Code

Merge branch 'fl/config'
[git.git] / Documentation / git-config.txt
index 8f4149fd6169ecfe892dd3160a7dcc43dd1086fe..5f66a7fcd5907b26ff6bdf94b53c2619c1eff509 100644 (file)
@@ -9,16 +9,17 @@ git-config - Get and set repository or global options
 SYNOPSIS
 --------
 [verse]
-'git-config' [--system | --global] name [value [value_regex]]
-'git-config' [--system | --global] --add name value
-'git-config' [--system | --global] --replace-all name [value [value_regex]]
-'git-config' [--system | --global] [type] --get name [value_regex]
-'git-config' [--system | --global] [type] --get-all name [value_regex]
+'git-config' [--system | --global] [type] [-z|--null] name [value [value_regex]]
+'git-config' [--system | --global] [type] --add name value
+'git-config' [--system | --global] [type] --replace-all name [value [value_regex]]
+'git-config' [--system | --global] [type] [-z|--null] --get name [value_regex]
+'git-config' [--system | --global] [type] [-z|--null] --get-all name [value_regex]
+'git-config' [--system | --global] [type] [-z|--null] --get-regexp name_regex [value_regex]
 'git-config' [--system | --global] --unset name [value_regex]
 'git-config' [--system | --global] --unset-all name [value_regex]
 'git-config' [--system | --global] --rename-section old_name new_name
 'git-config' [--system | --global] --remove-section name
-'git-config' [--system | --global] -l | --list
+'git-config' [--system | --global] [-z|--null] -l | --list
 
 DESCRIPTION
 -----------
@@ -36,8 +37,7 @@ prepend a single exclamation mark in front (see also <<EXAMPLES>>).
 The type specifier can be either '--int' or '--bool', which will make
 'git-config' ensure that the variable(s) are of the given type and
 convert the value to the canonical form (simple decimal number for int,
-a "true" or "false" string for bool).  Type specifiers currently only
-take effect for reading operations.  If no type specifier is passed,
+a "true" or "false" string for bool).  If no type specifier is passed,
 no checks or transformations are performed on the value.
 
 This command will fail if:
@@ -73,13 +73,25 @@ OPTIONS
 
 --get-regexp::
        Like --get-all, but interprets the name as a regular expression.
+       Also outputs the key names.
 
 --global::
-       Use global ~/.gitconfig file rather than the repository .git/config.
+       For writing options: write to global ~/.gitconfig file rather than
+       the repository .git/config.
++
+For reading options: read only from global ~/.gitconfig rather than
+from all available files.
++
+See also <<FILES>>.
 
 --system::
-       Use system-wide $(prefix)/etc/gitconfig rather than the repository
-       .git/config.
+       For writing options: write to system-wide $(prefix)/etc/gitconfig
+       rather than the repository .git/config.
++
+For reading options: read only from system-wide $(prefix)/etc/gitconfig
+rather than from all available files.
++
+See also <<FILES>>.
 
 --remove-section::
        Remove the given section from the configuration file.
@@ -105,19 +117,68 @@ OPTIONS
        in the config file will cause the value to be multiplied
        by 1024, 1048576, or 1073741824 prior to output.
 
+-z, --null::
+       For all options that output values and/or keys, always
+       end values with with the null character (instead of a
+       newline). Use newline instead as a delimiter between
+       key and value. This allows for secure parsing of the
+       output without getting confused e.g. by values that
+       contain line breaks.
+
+
+[[FILES]]
+FILES
+-----
+
+There are three files where git-config will search for configuration
+options:
+
+.git/config::
+       Repository specific configuration file. (The filename is
+       of course relative to the repository root, not the working
+       directory.)
+
+~/.gitconfig::
+       User-specific configuration file. Also called "global"
+       configuration file.
+
+$(prefix)/etc/gitconfig::
+       System-wide configuration file.
+
+If no further options are given, all reading options will read all of these
+files that are available. If the global or the system-wide configuration
+file are not available they will be ignored. If the repository configuration
+file is not available or readable, git-config will exit with a non-zero
+error code. However, in neither case will an error message be issued.
+
+All writing options will per default write to the repository specific
+configuration file. Note that this also affects options like '--replace-all'
+and '--unset'. *git-config will only ever change one file at a time*.
+
+You can override these rules either by command line options or by environment
+variables. The '--global' and the '--system' options will limit the file used
+to the global or system-wide file respectively. The GIT_CONFIG environment
+variable has a similar effect, but you can specify any filename you want.
+
+The GIT_CONFIG_LOCAL environment variable on the other hand only changes
+the name used instead of the repository configuration file. The global and
+the system-wide configuration files will still be read. (For writing options
+this will obviously result in the same behavior as using GIT_CONFIG.)
+
 
 ENVIRONMENT
 -----------
 
 GIT_CONFIG::
        Take the configuration from the given file instead of .git/config.
-       Using the "--global" option forces this to ~/.gitconfig.
+       Using the "--global" option forces this to ~/.gitconfig. Using the
+       "--system" option forces this to $(prefix)/etc/gitconfig.
 
 GIT_CONFIG_LOCAL::
-       Currently the same as $GIT_CONFIG; when Git will support global
-       configuration files, this will cause it to take the configuration
-       from the global configuration file in addition to the given file.
+       Take the configuration from the given file instead if .git/config.
+       Still read the global and the system-wide configuration files, though.
 
+See also <<FILES>>.
 
 
 [[EXAMPLES]]
@@ -239,4 +300,3 @@ Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.ker
 GIT
 ---
 Part of the gitlink:git[7] suite
-