This is basically a reroll from what was parked on 'pu' with two new patches at the end: one to not share info/sparse-checkout across worktrees, and one to allow 'checkout --to` from a bare repository. I cherry-picked two patches from jk/xstrfmt (on next) because they result in non-trivial conflicts. When this series is merged with jk/xstrfmt, you still get conflicts in environment.c, but you can just pick up my changes and drop Jeff's. Dennis Kaarsemaker (1): checkout: don't require a work tree when checking out into a new one Jeff King (2): setup_git_env: use git_pathdup instead of xmalloc + sprintf setup_git_env(): introduce git_path_from_env() helper Nguyễn Thái Ngọc Duy (29): path.c: make get_pathname() return strbuf instead of static buffer path.c: make get_pathname() call sites return const char * git_snpath(): retire and replace with strbuf_git_path() path.c: rename vsnpath() to do_git_path() path.c: group git_path(), git_pathdup() and strbuf_git_path() together git_path(): be aware of file relocation in $GIT_DIR *.sh: respect $GIT_INDEX_FILE reflog: avoid constructing .lock path with git_path fast-import: use git_path() for accessing .git dir instead of get_git_dir() commit: use SEQ_DIR instead of hardcoding "sequencer" $GIT_COMMON_DIR: a new environment variable git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects *.sh: avoid hardcoding $GIT_DIR/hooks/... git-stash: avoid hardcoding $GIT_DIR/logs/.... setup.c: convert is_git_directory() to use strbuf setup.c: detect $GIT_COMMON_DIR in is_git_directory() setup.c: convert check_repository_format_gently to use strbuf setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() setup.c: support multi-checkout repo setup wrapper.c: wrapper to open a file, fprintf then close use new wrapper write_file() for simple file writing checkout: support checking out into a new working directory checkout: clean up half-prepared directories in --to mode checkout: detach if the branch is already checked out elsewhere prune: strategies for linked checkouts gc: style change -- no SP before closing bracket gc: support prune --repos count-objects: report unused files in $GIT_DIR/repos/... git_path(): keep "info/sparse-checkout" per work-tree Documentation/config.txt | 9 ++ Documentation/git-checkout.txt | 34 +++++ Documentation/git-prune.txt | 3 + Documentation/git-rev-parse.txt | 10 ++ Documentation/git.txt | 9 ++ Documentation/gitrepository-layout.txt | 75 ++++++++-- builtin/branch.c | 4 +- builtin/checkout.c | 248 ++++++++++++++++++++++++++++++++- builtin/clone.c | 9 +- builtin/commit.c | 2 +- builtin/count-objects.c | 4 +- builtin/fetch.c | 5 +- builtin/fsck.c | 4 +- builtin/gc.c | 21 ++- builtin/init-db.c | 7 +- builtin/prune.c | 74 ++++++++++ builtin/receive-pack.c | 2 +- builtin/reflog.c | 2 +- builtin/remote.c | 2 +- builtin/repack.c | 8 +- builtin/rev-parse.c | 11 ++ cache.h | 17 ++- daemon.c | 11 +- environment.c | 45 ++++-- fast-import.c | 7 +- git-am.sh | 22 +-- git-pull.sh | 2 +- git-rebase--interactive.sh | 6 +- git-rebase--merge.sh | 6 +- git-rebase.sh | 4 +- git-sh-setup.sh | 2 +- git-stash.sh | 6 +- git.c | 2 +- notes-merge.c | 6 +- path.c | 234 +++++++++++++++++++++---------- refs.c | 86 +++++++----- refs.h | 2 +- run-command.c | 4 +- run-command.h | 2 +- setup.c | 124 +++++++++++++---- sha1_file.c | 2 +- submodule.c | 9 +- t/t0060-path-utils.sh | 35 +++++ t/t1501-worktree.sh | 76 ++++++++++ t/t1510-repo-setup.sh | 1 + t/t2025-checkout-to.sh (new +x) | 72 ++++++++++ templates/hooks--applypatch-msg.sample | 4 +- templates/hooks--pre-applypatch.sample | 4 +- trace.c | 1 + transport.c | 8 +- wrapper.c | 31 +++++ 51 files changed, 1109 insertions(+), 265 deletions(-) create mode 100755 t/t2025-checkout-to.sh -- 1.9.1.346.ga2b5940 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html