path: root/Documentation/technical
diff options
authorJunio C Hamano <>2014-08-04 21:03:25 (GMT)
committerJunio C Hamano <>2014-08-04 21:03:25 (GMT)
commit18bd789a1824c1ef47ce84d92e354021a373a4c1 (patch)
tree501d6cad9087f47d32495659f585b68fbb22cf72 /Documentation/technical
parentaa544bfbc6eb11e4f0471f3144d3e3ac75c0e4a9 (diff)
parent97d6e799aaa5048a3a5f57c11b5685be0a5a5a52 (diff)
Merge branch 'ta/doc-config'
* ta/doc-config: add documentation for writing config files
Diffstat (limited to 'Documentation/technical')
1 files changed, 30 insertions, 1 deletions
diff --git a/Documentation/technical/api-config.txt b/Documentation/technical/api-config.txt
index 230b3a0..edd5018 100644
--- a/Documentation/technical/api-config.txt
+++ b/Documentation/technical/api-config.txt
@@ -137,4 +137,33 @@ int read_file_with_include(const char *file, config_fn_t fn, void *data)
Writing Config Files
+Git gives multiple entry points in the Config API to write config values to
+files namely `git_config_set_in_file` and `git_config_set`, which write to
+a specific config file or to `.git/config` respectively. They both take a
+key/value pair as parameter.
+In the end they both call `git_config_set_multivar_in_file` which takes four
+- the name of the file, as a string, to which key/value pairs will be written.
+- the name of key, as a string. This is in canonical "flat" form: the section,
+ subsection, and variable segments will be separated by dots, and the section
+ and variable segments will be all lowercase.
+ E.g., `core.ignorecase`, `diff.SomeType.textconv`.
+- the value of the variable, as a string. If value is equal to NULL, it will
+ remove the matching key from the config file.
+- the value regex, as a string. It will disregard key/value pairs where value
+ does not match.
+- a multi_replace value, as an int. If value is equal to zero, nothing or only
+ one matching key/value is replaced, else all matching key/values (regardless
+ how many) are removed, before the new pair is written.
+It returns 0 on success.
+Also, there are functions `git_config_rename_section` and
+`git_config_rename_section_in_file` with parameters `old_name` and `new_name`
+for renaming or removing sections in the config files. If NULL is passed
+through `new_name` parameter, the section will be removed from the config file.