Skip to content
  • Duy Nguyen's avatar
    worktree: add per-worktree config files · 58b284a2
    Duy Nguyen authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    A new repo extension is added, worktreeConfig. When it is present:
    
     - Repository config reading by default includes $GIT_DIR/config _and_
       $GIT_DIR/config.worktree. "config" file remains shared in multiple
       worktree setup.
    
     - The special treatment for core.bare and core.worktree, to stay
       effective only in main worktree, is gone. These config settings are
       supposed to be in config.worktree.
    
    This extension is most useful in multiple worktree setup because you
    now have an option to store per-worktree config (which is either
    .git/config.worktree for main worktree, or
    .git/worktrees/xx/config.worktree for linked ones).
    
    This extension can be used in single worktree mode, even though it's
    pretty much useless (but this can happen after you remove all linked
    worktrees and move back to single worktree).
    
    "git config" reads from both "config" and "config.worktree" by default
    (i.e. without either --user, --file...) when this extension is
    present. Default writes still go to "config", not "config.worktree". A
    new option --worktree is added for that (*).
    
    Since a new repo extension is introduced, existing git binaries should
    refuse to access to the repo (both from main and linked worktrees). So
    they will not misread the config file (i.e. skip the config.worktree
    part). They may still accidentally write to the config file anyway if
    they use with "git config --file <path>".
    
    This design places a bet on the assumption that the majority of config
    variables are shared so it is the default mode. A safer move would be
    default writes go to per-worktree file, so that accidental changes are
    isolated.
    
    (*) "git config --worktree" points back to "config" file when this
        extension is not present and there is only one worktree so that it
        works in any both single and multiple worktree setups.
    
    Signed-off-by: default avatarNguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    58b284a2