)]}'
{
  "commit": "5723fe7e3cbbefae78bfb79c46b7716eef76fe52",
  "tree": "1d3eb8d8bbba8e7ce9a800c4820dee0e4e9e45b4",
  "parents": [
    "9adefee5b5811c57c30cf81804127b59b235538a"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Jun 14 10:50:12 2008 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Sat Jun 14 14:39:22 2008 -0700"
  },
  "message": "Avoid cross-directory renames and linking on object creation\n\nInstead of creating new temporary objects in the top-level git object\ndirectory, create them in the same directory they will finally end up in\nanyway.  This avoids making the final atomic \"rename to stable name\"\noperation be a cross-directory event, which makes it a lot easier for\nvarious filesystems.\n\nSeveral filesystems do things like change the inode number when moving\nfiles across directories (or refuse to do it entirely).\n\nIn particular, it can also cause problems for NFS implementations that\nchange the filehandle of a file when it moves to a different directory,\nlike the old user-space NFS server did, and like the Linux knfsd still\ndoes if you don\u0027t export your filesystems with \u0027no_subtree_check\u0027 or if\nyou export a filesystem that doesn\u0027t have stable inode numbers across\nrenames).\n\nThis change also obviously implies creating the object fan-out\nsubdirectory at tempfile creation time, rather than at the final\nmove_temp_to_file() time.  Which actually accounts for most of the size\nof the patch.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e27c96ee312ad4be8dc32c1b03bb3f716a8b0fec",
      "old_mode": 33188,
      "old_path": "sha1_file.c",
      "new_id": "8d48a23c04b2c262d45c0b15570c73e964798830",
      "new_mode": 33188,
      "new_path": "sha1_file.c"
    }
  ]
}
