I'll describe differences between this series and Elijah's one [1]. I think it's more interesting. Changes from v2 [2] will follow later. In short I think the two series are converging. The outstanding difference is Elijah drops shallow clone in favor of more flexible history cutting while I only focus on tree cutting. Two other differences are tree traversal and tree generating. I admit that changing traverse_trees() the way Elijah does is more flexible and is probably the only way to support negative pathspec. And I think his sparse clone supports even cloning a single file. Mine does not support that. I'm going to steal some of his patches at some point. Tree generating from index, Elijah merges the base tree inside write_cache_as_tree() while it does it inside commit_tree(). Again the principle is pretty much the same. I'll see if I can resist from stealing some more :) OK, changes from v2: - Require en/object-list-with-pathspec - Use lower-case index extension instead of stepping index version to 4 - Support cloning multiple tree - Remote merge is dropped. It may be resurrected at some point if people like to merge so much. Things that won't work: - fsck/prune/... - Shell scripts that use "git write-tree" What's next: - stealing - fsck (will probably make fsck use rev-list in narrow repo) - only send commits that have changes in narrow area and graft it at client side [1] http://mid.gmane.org/1283645647-1891-1-git-send-email-newren@xxxxxxxxx [2] http://mid.gmane.org/1282688422-7738-1-git-send-email-pclouds@xxxxxxxxx Nguyễn Thái Ngọc Duy (17): rev-list: do not do commit simplification if simplify_history = 0 tree.c: add path_to_sha1() Introduce $GIT_DIR/narrow index: make narrow index incompatible with older git pack-objects: support narrow packs with pathspecs {fetch,upload}-pack: support narrow repository unpack-trees: split traverse_trees() code into a separate function unpack-trees: support unpack trees in narrow repository cache-tree: only cache tree within narrow area get_pathspec(): support narrow pathspec rewriting pathspec retrieval fix clone: support --narrow option commit: add narrow's commit_tree version commit: use commit_narrow_tree() to support narrow repo write-tree: requires --narrow-base in narrow repository merge: try to do local merge if possible in narrow repo Add narrow clone demonstration test .gitignore | 1 + Documentation/git-clone.txt | 14 ++- Documentation/git-fetch-pack.txt | 3 + Documentation/git-merge.txt | 16 ++ Documentation/git-pack-objects.txt | 2 +- Documentation/git-rev-parse.txt | 3 + Documentation/gitrepository-layout.txt | 5 + Documentation/technical/pack-protocol.txt | 3 + Makefile | 3 + builtin/clone.c | 43 +++++ builtin/commit.c | 16 +- builtin/fetch-pack.c | 9 + builtin/grep.c | 5 +- builtin/ls-files.c | 2 +- builtin/ls-tree.c | 2 +- builtin/merge.c | 60 ++++++- builtin/pack-objects.c | 19 ++- builtin/reset.c | 3 +- builtin/rev-parse.c | 8 + builtin/write-tree.c | 25 +++ cache-tree.c | 41 ++++- cache.h | 5 + commit.c | 16 ++ commit.h | 5 + environment.c | 2 + git-am.sh | 2 +- narrow-tree.c | 285 +++++++++++++++++++++++++++++ narrow-tree.h | 8 + read-cache.c | 32 +++- revision.c | 7 +- setup.c | 172 +++++++++++++++++- t/t0062-narrow-pathspec.sh | 150 +++++++++++++++ t/t0063-narrow-repo.sh | 74 ++++++++ t/t1013-read-tree-narrow.sh | 72 ++++++++ t/t6000-rev-list-misc.sh | 9 + t/t7510-commit-narrow.sh | 30 +++ t/t9999-narrow.sh | 87 +++++++++ test-get-pathspec.c | 17 ++ tree.c | 35 ++++ tree.h | 2 + unpack-trees.c | 153 +++++++++++++--- upload-pack.c | 39 ++++- 42 files changed, 1420 insertions(+), 65 deletions(-) create mode 100644 narrow-tree.c create mode 100644 narrow-tree.h create mode 100755 t/t0062-narrow-pathspec.sh create mode 100755 t/t0063-narrow-repo.sh create mode 100755 t/t1013-read-tree-narrow.sh create mode 100755 t/t7510-commit-narrow.sh create mode 100755 t/t9999-narrow.sh create mode 100644 test-get-pathspec.c -- 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