This patch series re-submits the 'git add' integration with sparse-index. The performance gains are the same as before. It is based on ds/commit-and-checkout-with-sparse-index. This series was delayed from its initial submission for a couple reasons. The first was because it was colliding with some changes in mt/add-rm-in-sparse-checkout, so now we are far enough along that that branch is in our history and we can work forwards. The other concern was about how 'git add ' should respond when a path outside of the sparse-checkout cone exists. One recommendation (that I am failing to find a link to the message, sorry) was to disallow adding files that would become index entries with SKIP_WORKTREE on. However, as I worked towards that goal I found that change would cause problems for a realistic scenario: merge conflicts outside of the sparse-checkout cone. The first patch of this series adds tests that create merge conflicts outside of the sparse cone and then presents different ways a user could resolve the situation. We want all of them to be feasible, and this includes: 1. Reverting the file to a known version in history. 2. Adding the file with its contents on disk. 3. Moving the file to a new location in the sparse directory. Without maintaining the behavior of adding files outside of the sparse-checkout cone, we risk confusing users who get into this state. The only workaround they would have is to modify their sparse-checkout definition which might lead to expanding much more data than they need to resolve the conflicts. For that reason, I stopped trying to limit 'git add' to be within the cone. I'm open to suggestions here, but we need an approach that works for out-of-cone conflicts. The one place I did continue to update is 'git add --refresh ' to match the behavior added by mt/add-rm-in-sparse-checkout which outputs an error message. This happens even when the file exists in the working directory, but that seems appropriate enough. Thanks, -Stolee Derrick Stolee (5): t1092: test merge conflicts outside cone add: allow operating on a sparse-only index pathspec: stop calling ensure_full_index t1092: 'git add --refresh' difference with sparse-index add: ignore outside the sparse-checkout in refresh() builtin/add.c | 13 ++++- pathspec.c | 2 - t/t1092-sparse-checkout-compatibility.sh | 71 ++++++++++++++++++++---- 3 files changed, 72 insertions(+), 14 deletions(-) base-commit: 71e301501c88399711a1bf8515d1747e92cfbb9b Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-999%2Fderrickstolee%2Fsparse-index%2Fadd-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-999/derrickstolee/sparse-index/add-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/999 -- gitgitgadget