1
0
mirror of https://github.com/git/git.git synced 2024-10-21 22:18:12 +02:00
git/Documentation/technical
Jeff King 9b25a0b52e config: add include directive
It can be useful to split your ~/.gitconfig across multiple
files. For example, you might have a "main" file which is
used on many machines, but a small set of per-machine
tweaks. Or you may want to make some of your config public
(e.g., clever aliases) while keeping other data back (e.g.,
your name or other identifying information). Or you may want
to include a number of config options in some subset of your
repos without copying and pasting (e.g., you want to
reference them from the .git/config of participating repos).

This patch introduces an include directive for config files.
It looks like:

  [include]
    path = /path/to/file

This is syntactically backwards-compatible with existing git
config parsers (i.e., they will see it as another config
entry and ignore it unless you are looking up include.path).

The implementation provides a "git_config_include" callback
which wraps regular config callbacks. Callers can pass it to
git_config_from_file, and it will transparently follow any
include directives, passing all of the discovered options to
the real callback.

Include directives are turned on automatically for "regular"
git config parsing. This includes calls to git_config, as
well as calls to the "git config" program that do not
specify a single file (e.g., using "-f", "--global", etc).
They are not turned on in other cases, including:

  1. Parsing of other config-like files, like .gitmodules.
     There isn't a real need, and I'd rather be conservative
     and avoid unnecessary incompatibility or confusion.

  2. Reading single files via "git config". This is for two
     reasons:

       a. backwards compatibility with scripts looking at
          config-like files.

       b. inspection of a specific file probably means you
	  care about just what's in that file, not a general
          lookup for "do we have this value anywhere at
	  all". If that is not the case, the caller can
	  always specify "--includes".

  3. Writing files via "git config"; we want to treat
     include.* variables as literal items to be copied (or
     modified), and not expand them. So "git config
     --unset-all foo.bar" would operate _only_ on
     .git/config, not any of its included files (just as it
     also does not operate on ~/.gitconfig).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-02-17 07:59:55 -08:00
..
.gitignore
api-allocation-growing.txt
api-argv-array.txt refactor argv_array into generic code 2011-09-14 11:56:36 -07:00
api-builtin.txt add gitignore entry to description about how to write a builtin 2011-08-03 11:44:23 -07:00
api-config.txt config: add include directive 2012-02-17 07:59:55 -08:00
api-credentials.txt credential: add function for parsing url components 2011-12-11 23:16:24 -08:00
api-decorate.txt
api-diff.txt
api-directory-listing.txt
api-gitattributes.txt Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
api-grep.txt
api-hash.txt
api-history-graph.txt
api-in-core-index.txt
api-index-skel.txt
api-index.sh
api-lockfile.txt
api-merge.txt
api-object-access.txt
api-parse-options.txt parseopt: add OPT_NOOP_NOARG 2011-09-28 12:46:21 -07:00
api-quote.txt
api-ref-iteration.txt add technical documentation about ref iteration 2011-08-22 15:01:14 -07:00
api-remote.txt
api-revision-walking.txt
api-run-command.txt
api-setup.txt
api-sha1-array.txt add sha1_array API docs 2011-09-14 11:44:05 -07:00
api-sigchain.txt
api-strbuf.txt
api-string-list.txt string-list: Add API to remove an item from an unsorted list 2011-08-14 14:19:35 -07:00
api-tree-walking.txt
api-xdiff-interface.txt
index-format.txt Documentation: clarify the invalidated tree entry format 2011-07-31 18:23:49 -07:00
pack-format.txt
pack-heuristics.txt
pack-protocol.txt pack-protocol: document "ERR" line 2011-10-03 14:57:36 -07:00
protocol-capabilities.txt
protocol-common.txt
racy-git.txt
send-pack-pipeline.txt
shallow.txt
trivial-merge.txt