1git-config(1) 2============= 3 4NAME 5---- 6git-config - Get and set repository or global options 7 8 9SYNOPSIS 10-------- 11[verse] 12'git-config' [--system | --global] [type] [-z|--null] name [value [value_regex]] 13'git-config' [--system | --global] [type] --add name value 14'git-config' [--system | --global] [type] --replace-all name [value [value_regex]] 15'git-config' [--system | --global] [type] [-z|--null] --get name [value_regex] 16'git-config' [--system | --global] [type] [-z|--null] --get-all name [value_regex] 17'git-config' [--system | --global] [type] [-z|--null] --get-regexp name_regex [value_regex] 18'git-config' [--system | --global] --unset name [value_regex] 19'git-config' [--system | --global] --unset-all name [value_regex] 20'git-config' [--system | --global] --rename-section old_name new_name 21'git-config' [--system | --global] --remove-section name 22'git-config' [--system | --global] [-z|--null] -l | --list 23 24DESCRIPTION 25----------- 26You can query/set/replace/unset options with this command. The name is 27actually the section and the key separated by a dot, and the value will be 28escaped. 29 30Multiple lines can be added to an option by using the '--add' option. 31If you want to update or unset an option which can occur on multiple 32lines, a POSIX regexp `value_regex` needs to be given. Only the 33existing values that match the regexp are updated or unset. If 34you want to handle the lines that do *not* match the regex, just 35prepend a single exclamation mark in front (see also <<EXAMPLES>>). 36 37The type specifier can be either '--int' or '--bool', which will make 38'git-config' ensure that the variable(s) are of the given type and 39convert the value to the canonical form (simple decimal number for int, 40a "true" or "false" string for bool). If no type specifier is passed, 41no checks or transformations are performed on the value. 42 43This command will fail if: 44 45. The .git/config file is invalid, 46. Can not write to .git/config, 47. no section was provided, 48. the section or key is invalid, 49. you try to unset an option which does not exist, 50. you try to unset/set an option for which multiple lines match, or 51. you use '--global' option without $HOME being properly set. 52 53 54OPTIONS 55------- 56 57--replace-all:: 58 Default behavior is to replace at most one line. This replaces 59 all lines matching the key (and optionally the value_regex). 60 61--add:: 62 Adds a new line to the option without altering any existing 63 values. This is the same as providing '^$' as the value_regex. 64 65--get:: 66 Get the value for a given key (optionally filtered by a regex 67 matching the value). Returns error code 1 if the key was not 68 found and error code 2 if multiple key values were found. 69 70--get-all:: 71 Like get, but does not fail if the number of values for the key 72 is not exactly one. 73 74--get-regexp:: 75 Like --get-all, but interprets the name as a regular expression. 76 Also outputs the key names. 77 78--global:: 79 For writing options: write to global ~/.gitconfig file rather than 80 the repository .git/config. 81+ 82For reading options: read only from global ~/.gitconfig rather than 83from all available files. 84+ 85See also <<FILES>>. 86 87--system:: 88 For writing options: write to system-wide $(prefix)/etc/gitconfig 89 rather than the repository .git/config. 90+ 91For reading options: read only from system-wide $(prefix)/etc/gitconfig 92rather than from all available files. 93+ 94See also <<FILES>>. 95 96--remove-section:: 97 Remove the given section from the configuration file. 98 99--rename-section:: 100 Rename the given section to a new name. 101 102--unset:: 103 Remove the line matching the key from config file. 104 105--unset-all:: 106 Remove all lines matching the key from config file. 107 108-l, --list:: 109 List all variables set in config file. 110 111--bool:: 112 git-config will ensure that the output is "true" or "false" 113 114--int:: 115 git-config will ensure that the output is a simple 116 decimal number. An optional value suffix of 'k', 'm', or 'g' 117 in the config file will cause the value to be multiplied 118 by 1024, 1048576, or 1073741824 prior to output. 119 120-z, --null:: 121 For all options that output values and/or keys, always 122 end values with with the null character (instead of a 123 newline). Use newline instead as a delimiter between 124 key and value. This allows for secure parsing of the 125 output without getting confused e.g. by values that 126 contain line breaks. 127 128 129[[FILES]] 130FILES 131----- 132 133There are three files where git-config will search for configuration 134options: 135 136.git/config:: 137 Repository specific configuration file. (The filename is 138 of course relative to the repository root, not the working 139 directory.) 140 141~/.gitconfig:: 142 User-specific configuration file. Also called "global" 143 configuration file. 144 145$(prefix)/etc/gitconfig:: 146 System-wide configuration file. 147 148If no further options are given, all reading options will read all of these 149files that are available. If the global or the system-wide configuration 150file are not available they will be ignored. If the repository configuration 151file is not available or readable, git-config will exit with a non-zero 152error code. However, in neither case will an error message be issued. 153 154All writing options will per default write to the repository specific 155configuration file. Note that this also affects options like '--replace-all' 156and '--unset'. *git-config will only ever change one file at a time*. 157 158You can override these rules either by command line options or by environment 159variables. The '--global' and the '--system' options will limit the file used 160to the global or system-wide file respectively. The GIT_CONFIG environment 161variable has a similar effect, but you can specify any filename you want. 162 163The GIT_CONFIG_LOCAL environment variable on the other hand only changes 164the name used instead of the repository configuration file. The global and 165the system-wide configuration files will still be read. (For writing options 166this will obviously result in the same behavior as using GIT_CONFIG.) 167 168 169ENVIRONMENT 170----------- 171 172GIT_CONFIG:: 173 Take the configuration from the given file instead of .git/config. 174 Using the "--global" option forces this to ~/.gitconfig. Using the 175 "--system" option forces this to $(prefix)/etc/gitconfig. 176 177GIT_CONFIG_LOCAL:: 178 Take the configuration from the given file instead if .git/config. 179 Still read the global and the system-wide configuration files, though. 180 181See also <<FILES>>. 182 183 184[[EXAMPLES]] 185EXAMPLES 186-------- 187 188Given a .git/config like this: 189 190 # 191 # This is the config file, and 192 # a '#' or ';' character indicates 193 # a comment 194 # 195 196 ; core variables 197 [core] 198 ; Don't trust file modes 199 filemode = false 200 201 ; Our diff algorithm 202 [diff] 203 external = "/usr/local/bin/gnu-diff -u" 204 renames = true 205 206 ; Proxy settings 207 [core] 208 gitproxy="ssh" for "ssh://kernel.org/" 209 gitproxy="proxy-command" for kernel.org 210 gitproxy="myprotocol-command" for "my://" 211 gitproxy=default-proxy ; for all the rest 212 213you can set the filemode to true with 214 215------------ 216% git config core.filemode true 217------------ 218 219The hypothetical proxy command entries actually have a postfix to discern 220what URL they apply to. Here is how to change the entry for kernel.org 221to "ssh". 222 223------------ 224% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$' 225------------ 226 227This makes sure that only the key/value pair for kernel.org is replaced. 228 229To delete the entry for renames, do 230 231------------ 232% git config --unset diff.renames 233------------ 234 235If you want to delete an entry for a multivar (like core.gitproxy above), 236you have to provide a regex matching the value of exactly one line. 237 238To query the value for a given key, do 239 240------------ 241% git config --get core.filemode 242------------ 243 244or 245 246------------ 247% git config core.filemode 248------------ 249 250or, to query a multivar: 251 252------------ 253% git config --get core.gitproxy "for kernel.org$" 254------------ 255 256If you want to know all the values for a multivar, do: 257 258------------ 259% git config --get-all core.gitproxy 260------------ 261 262If you like to live dangerous, you can replace *all* core.gitproxy by a 263new one with 264 265------------ 266% git config --replace-all core.gitproxy ssh 267------------ 268 269However, if you really only want to replace the line for the default proxy, 270i.e. the one without a "for ..." postfix, do something like this: 271 272------------ 273% git config core.gitproxy ssh '! for ' 274------------ 275 276To actually match only values with an exclamation mark, you have to 277 278------------ 279% git config section.key value '[!]' 280------------ 281 282To add a new proxy, without altering any of the existing ones, use 283 284------------ 285% git config core.gitproxy '"proxy" for example.com' 286------------ 287 288 289include::config.txt[] 290 291 292Author 293------ 294Written by Johannes Schindelin <Johannes.Schindelin@gmx.de> 295 296Documentation 297-------------- 298Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.kernel.org>. 299 300GIT 301--- 302Part of the gitlink:git[7] suite