)]}'
{
  "commit": "9b25a0b52e09400719366f0a33d0d0da98bbf7b0",
  "tree": "35f8ac15096787f3a90b775fe29fc93054b6989e",
  "parents": [
    "4a7bb5ba950f08d1e46c4bd2e8b1c903b4d024c8"
  ],
  "author": {
    "name": "Jeff King",
    "email": "peff@peff.net",
    "time": "Mon Feb 06 04:54:04 2012 -0500"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Feb 17 07:59:55 2012 -0800"
  },
  "message": "config: add include directive\n\nIt can be useful to split your ~/.gitconfig across multiple\nfiles. For example, you might have a \"main\" file which is\nused on many machines, but a small set of per-machine\ntweaks. Or you may want to make some of your config public\n(e.g., clever aliases) while keeping other data back (e.g.,\nyour name or other identifying information). Or you may want\nto include a number of config options in some subset of your\nrepos without copying and pasting (e.g., you want to\nreference them from the .git/config of participating repos).\n\nThis patch introduces an include directive for config files.\nIt looks like:\n\n  [include]\n    path \u003d /path/to/file\n\nThis is syntactically backwards-compatible with existing git\nconfig parsers (i.e., they will see it as another config\nentry and ignore it unless you are looking up include.path).\n\nThe implementation provides a \"git_config_include\" callback\nwhich wraps regular config callbacks. Callers can pass it to\ngit_config_from_file, and it will transparently follow any\ninclude directives, passing all of the discovered options to\nthe real callback.\n\nInclude directives are turned on automatically for \"regular\"\ngit config parsing. This includes calls to git_config, as\nwell as calls to the \"git config\" program that do not\nspecify a single file (e.g., using \"-f\", \"--global\", etc).\nThey are not turned on in other cases, including:\n\n  1. Parsing of other config-like files, like .gitmodules.\n     There isn\u0027t a real need, and I\u0027d rather be conservative\n     and avoid unnecessary incompatibility or confusion.\n\n  2. Reading single files via \"git config\". This is for two\n     reasons:\n\n       a. backwards compatibility with scripts looking at\n          config-like files.\n\n       b. inspection of a specific file probably means you\n\t  care about just what\u0027s in that file, not a general\n          lookup for \"do we have this value anywhere at\n\t  all\". If that is not the case, the caller can\n\t  always specify \"--includes\".\n\n  3. Writing files via \"git config\"; we want to treat\n     include.* variables as literal items to be copied (or\n     modified), and not expand them. So \"git config\n     --unset-all foo.bar\" would operate _only_ on\n     .git/config, not any of its included files (just as it\n     also does not operate on ~/.gitconfig).\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "abeb82b2c6d40e8557f7a5f8ad4c5e98b3a26a62",
      "old_mode": 33188,
      "old_path": "Documentation/config.txt",
      "new_id": "e55dae1806a8889d8179c94139bb60a2c5f7a9a6",
      "new_mode": 33188,
      "new_path": "Documentation/config.txt"
    },
    {
      "type": "modify",
      "old_id": "e7ecf5d803e14dfa452671cf01e7730dce48b984",
      "old_mode": 33188,
      "old_path": "Documentation/git-config.txt",
      "new_id": "aa8303b1adb1ac6efba6a5919a6a59495e89c6fb",
      "new_mode": 33188,
      "new_path": "Documentation/git-config.txt"
    },
    {
      "type": "modify",
      "old_id": "b0aeb2e481ecabdb4ce60dce4aa8efe61f06f648",
      "old_mode": 33188,
      "old_path": "Documentation/technical/api-config.txt",
      "new_id": "edf8dfb99b0accf1c3cbe870bdc332783a344dc9",
      "new_mode": 33188,
      "new_path": "Documentation/technical/api-config.txt"
    },
    {
      "type": "modify",
      "old_id": "ccbb13add2b80e39ef806d352850d85e1f73f819",
      "old_mode": 33188,
      "old_path": "builtin/config.c",
      "new_id": "d41a9bfb143c2bd82e539c3f390f17914c2e853a",
      "new_mode": 33188,
      "new_path": "builtin/config.c"
    },
    {
      "type": "modify",
      "old_id": "52d2c1e5844ea7354daee81cbb150580f227da35",
      "old_mode": 33188,
      "old_path": "cache.h",
      "new_id": "8fdad9412d8fc7cd399b0c342a93ddb9f1a4672f",
      "new_mode": 33188,
      "new_path": "cache.h"
    },
    {
      "type": "modify",
      "old_id": "1e30ad9d18dc51eeaee72e33b6cc133e6ead1c99",
      "old_mode": 33188,
      "old_path": "config.c",
      "new_id": "ad0390819d2701d6153adf9db2947ee4908742ce",
      "new_mode": 33188,
      "new_path": "config.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4b1cbaa0284f9b9cc3e29bf5f07b1a6a1f3a283c",
      "new_mode": 33261,
      "new_path": "t/t1305-config-include.sh"
    }
  ]
}
