git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 0/6] Split .git/config in multiple worktree setup

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jan 26, 2016, 11:44 UTC
Message-ID
<1453808685-21235-1-git-send-email-pclouds@gmail.com>
In-Reply-To
<1451186079-6119-1-git-send-email-pclouds@gmail.com>

I've changed my mind. So v3 is not a polished v2. It's quite different. And I hope it's good different.

In v2, .git/config contains both shared part and the per-worktree part (for main worktree). It's ugly, slow and hard to work with. v3 adds a completly new config file for sharing. ".git/config" will not be shared any more.

For any worktree, the new file .git/common/config is read first, then either .git/config or .git/worktrees/xxx/config is read after. There's no special per-worktree var list any more. Which is great. You want to add per-worktree config vars, use "git config --local". You want to add per-repo config vars, use (new) "git config --repo". You put a variable in a wrong file, you're punished for it (and it's the same today, say if you put core.worktree to /etc/gitconfig).

The only ugly part I see is how to deal with released git binaries, how to make it reject the new config split (because otherwise it would read incorrectly).

A lot more explanation is in patch 04/06. The series is also available at https://github.com/pclouds/git/tree/worktree-config

Nguyễn Thái Ngọc Duy (6):
  worktree: new repo extension to manage worktree behaviors
  path.c: new (identical) list for worktree v1
  worktree: share .git/common in v1
  worktree: new config file hierarchy
  config: select .git/common/config with --repo
  worktree add: switch to worktree version 1
 Documentation/config.txt                       |   5 +-
 Documentation/git-config.txt                   |  14 +++-
 Documentation/git-worktree.txt                 |  31 +++++++-
 Documentation/gitrepository-layout.txt         |  12 +++
 Documentation/technical/repository-version.txt |   6 ++
 builtin/config.c                               |  19 +++--
 builtin/worktree.c                             |  95 ++++++++++++++++++++++
 cache.h                                        |   5 +-
 config.c                                       |  14 +++-
 environment.c                                  |   1 +
 path.c                                         |  40 +++++++++-
 setup.c                                        |  40 ++++++++--
 t/t2028-worktree-config.sh (new +x)            | 104 +++++++++++++++++++++++++
 13 files changed, 364 insertions(+), 22 deletions(-)
 create mode 100755 t/t2028-worktree-config.sh
-- 
2.7.0.288.g1d8ad15
Previous: Max KirillovNext: Nguyễn Thái Ngọc Duy
Message 24 of 53 in “Split .git/config in multiple worktree setup”
  1. 0/5 Split .git/config in multiple worktree setupNguyễn Thái Ngọc Duy, Dec 2, 2015
  2. 1/5 dir.c: clean the entire struct in clear_exclude_list()Nguyễn Thái Ngọc Duy, Dec 2, 2015
  3. 2/5 config.c: move worktree-specific variables to .git/worktrees/...Nguyễn Thái Ngọc Duy, Dec 2, 2015
  4. Eric SunshineDec 6, 2015
  5. Duy NguyenDec 6, 2015
  6. 3/5 setup.c: remove special case of core.worktree and core.bareNguyễn Thái Ngọc Duy, Dec 2, 2015
  7. 4/5 worktree: make core.sparseCheckout and core.ignoreStat per-worktreeNguyễn Thái Ngọc Duy, Dec 2, 2015
  8. 5/5 git-worktree.txt: mention about the config file splitNguyễn Thái Ngọc Duy, Dec 2, 2015
  9. Eric SunshineDec 6, 2015
  10. Max KirillovDec 3, 2015
  11. Duy NguyenDec 3, 2015
  12. Junio C HamanoDec 3, 2015
  13. Max KirillovDec 3, 2015
  14. Max KirillovDec 3, 2015
  15. Duy NguyenDec 4, 2015
  16. 0/6 Split .git/config in multiple worktree setupNguyễn Thái Ngọc Duy, Dec 27, 2015
  17. 1/6 Define new repo extension to manage multiple worktree behaviorsNguyễn Thái Ngọc Duy, Dec 27, 2015
  18. 2/6 config.c: move worktree-specific variables to .git/worktrees/...Nguyễn Thái Ngọc Duy, Dec 27, 2015
  19. 3/6 setup.c: remove special case of core.worktree and core.bareNguyễn Thái Ngọc Duy, Dec 27, 2015
  20. 4/6 worktree: make core.sparseCheckout and core.ignoreStat per-worktreeNguyễn Thái Ngọc Duy, Dec 27, 2015
  21. 5/6 config.c: allow to un-share certain config in multi-worktree setupNguyễn Thái Ngọc Duy, Dec 27, 2015
  22. 6/6 worktree: bump worktree version to 1 on "worktree add"Nguyễn Thái Ngọc Duy, Dec 27, 2015
  23. Max KirillovJan 11, 2016
  24. 0/6 Split .git/config in multiple worktree setupNguyễn Thái Ngọc Duy, Jan 26, 2016
  25. 1/6 worktree: new repo extension to manage worktree behaviorsNguyễn Thái Ngọc Duy, Jan 26, 2016
  26. Junio C HamanoJan 27, 2016
  27. Duy NguyenJan 28, 2016
  28. Max KirillovJan 30, 2016
  29. Junio C HamanoJan 31, 2016
  30. Stefan MonnierFeb 1, 2016
  31. Stefan MonnierFeb 1, 2016
  32. Duy NguyenFeb 1, 2016
  33. Junio C HamanoFeb 1, 2016
  34. git worktree (was: [PATCH v3 1/6] worktree: new repo extension to manage worktree behaviors)Stefan Monnier, Feb 4, 2016
  35. Dennis KaarsemakerFeb 1, 2016
  36. Max KirillovJan 30, 2016
  37. 2/6 path.c: new (identical) list for worktree v1Nguyễn Thái Ngọc Duy, Jan 26, 2016
  38. Junio C HamanoJan 27, 2016
  39. Max KirillovJan 30, 2016
  40. 3/6 worktree: share .git/common in v1Nguyễn Thái Ngọc Duy, Jan 26, 2016
  41. 4/6 worktree: new config file hierarchyNguyễn Thái Ngọc Duy, Jan 26, 2016
  42. Junio C HamanoJan 27, 2016
  43. Duy NguyenJan 28, 2016
  44. Junio C HamanoJan 28, 2016
  45. Duy NguyenFeb 1, 2016
  46. 5/6 config: select .git/common/config with --repoNguyễn Thái Ngọc Duy, Jan 26, 2016
  47. Max KirillovJan 30, 2016
  48. Duy NguyenFeb 1, 2016
  49. 6/6 worktree add: switch to worktree version 1Nguyễn Thái Ngọc Duy, Jan 26, 2016
  50. Max KirillovFeb 1, 2016
  51. Duy NguyenFeb 1, 2016
  52. Max KirillovFeb 2, 2016
  53. Junio C HamanoJan 27, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.