[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