1. 19 2月, 2014 2 次提交
  2. 30 4月, 2012 1 次提交
  3. 17 2月, 2012 1 次提交
    • J
      config: add include directive · 9b25a0b5
      Jeff King 提交于
      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: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      9b25a0b5