The UI and behavior are taking shape now. On the UI side, you do
git checkout --to /somewhere -b newbranch origin/master
which will create worktree-only repo at /somewhere. "git prune --repos"
could be used to remove cruft in .git/repos.
On the behavior side, you should be able to do everything in
/somewhere just like in a normal repository. If a ref is updated (from
any repository) that also happens to be your HEAD, it will be
detached. "git rev-list --all" is also taught to take repos/.../HEAD
into account.
The structure of repos/XXX is documented in 17/21. Known issues
- naming ($GIT_SUPER_DIR, the name of the shared repo and the
dependent one, the reuse of "gitdir" in .git files)
- gc --auto support, support for manually pruning .git/repos
- should probably support the new .git format in enter_repo() so that
we can push to it
- not sure if we need UI for deleting repositories created with
checkout --to, or just "rm -r" and let "gc --auto" clean
things up. The thing about "rm -r(f)" is that if .git happens to be
a real repo, the user is screwed so I don't really like to
encourage doing it.
- more tests
Nguyễn Thái Ngọc Duy (21):
path.c: avoid PATH_MAX as buffer size from get_pathname()
path.c: rename vsnpath() to git_vsnpath()
path.c: move git_path() closer to similar functions git_pathdup()
Make git_path() aware of file relocation in $GIT_DIR
reflog: use avoid constructing .lock path with git_path
fast-import: use git_path() for accessing .git dir instead of get_git_dir()
Add new environment variable $GIT_SUPER_DIR
setup.c: refactor path manipulation out of read_gitfile()
setup.c: add split-repo support to .git files
setup.c: add split-repo support to is_git_directory()
setup.c: reduce cleanup sites in setup_explicit_git_dir()
environment.c: support super .git file specified by $GIT_DIR
setup: support $GIT_SUPER_DIR as well as super .git files
checkout: support checking out into a new working directory
checkout: clean up half-prepared directories in --to mode
setup.c: keep track of the .git file location if read
prune: strategies for split repositories
refs: adjust reflog path for repos/<id>/HEAD
refs: detach split repos' HEAD when the linked ref is updated/deleted
refs.c: refactor do_head_ref(... to do_one_ref("HEAD", ...
revision: include repos/../HEAD in --all
Documentation/config.txt | 3 +-
Documentation/git-checkout.txt | 6 +
Documentation/git-prune.txt | 4 +
Documentation/git.txt | 8 ++
Documentation/gitrepository-layout.txt | 30 ++++
builtin/checkout.c | 173 ++++++++++++++++++++++
builtin/prune.c | 65 +++++++++
builtin/reflog.c | 2 +-
builtin/rev-parse.c | 6 +
cache.h | 5 +
environment.c | 37 ++++-
fast-import.c | 5 +-
path.c | 140 ++++++++++++++----
refs.c | 88 ++++++++++--
refs.h | 1 +
revision.c | 1 +
setup.c | 253 ++++++++++++++++++++++++---------
t/t0060-path-utils.sh | 133 +++++++++++++++++
t/t1501-worktree.sh | 52 +++++++
t/t1510-repo-setup.sh | 1 +
test-path-utils.c | 7 +
trace.c | 1 +
22 files changed, 904 insertions(+), 117 deletions(-)
--
1.8.5.1.77.g42c48fa
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html