git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: [PATCH 1/1] reset: fix reset when using the sparse-checkout feature.

From
KWKevin Willford <kewillf@microsoft.com>
Date
Sep 13, 2017, 17:09 UTC
Message-ID
<SN1PR21MB0014D30A30F70B7DEAA17478B76E0@SN1PR21MB0014.namprd21.prod.outlook.com>
In-Reply-To
<CA+P7+xqcAh4v4gDQOm-feYGc1EmFztAu0zMg2xnp8Gn4=BzkoQ@mail.gmail.com>
Show 19 quoted lines
> From: Jacob Keller [mailto:jacob.keller@gmail.com]
> Sent: Tuesday, September 12, 2017 7:39 PM
> 
> On Tue, Sep 12, 2017 at 4:30 PM, Kevin Willford <kewillf@microsoft.com> wrote:
> >
> > Sorry.  It was not in the sparse-checkout file.
> > $ git config core.sparsecheckout true
> > $ echo /i > .git/info/sparse-checkout
> > $ git checkout -f
> > was ran in the modified file case as well and "i" was the only file in the
> > working directory before reset.
> >
> 
> 
> I'm assuming then that you mean that some file "m" is modified by the
> commit, and do not mean to say that it has local modifications in the
> working tree? That is not what I had inferred from earlier, so I was
> very much confused.
> 
Yes
> In this example, the only file actually checked out is "i", as
> everything else will have the skip-worktree bit set..?
> 
Yes
Show 5 quoted lines
> So doing git reset HEAD~1 will reset the branch back one commit, and
> now because of this reset is clearing the skip worktree flag, and
> since you never had a copy of it checked out it is notified as
> deleted, because it's no longer marked as skip-worktree?
> 
Correct
Show 9 quoted lines
> 
> I think the real fix is to stop having reset clear skip-worktree, no?
> 
> By definition if you do a sparse checkout, you're telling git "I only
> care about the files in this sparse checkout, and do not concern me
> with anything else"... So the proposed fix is "since git cleared the
> skip-worktree flag, we should actually also copy the file out again."
> but I think the real problem is that we're clearing skip worktree to
> begin with?

This certainly is an option but I would have some questions with this approach. Does this statement, "I only care about the files in this sparse checkout, and do not concern me with anything else", mean that git should not change files outside the sparse-checkout whether they are in the working directory or the index? Or does that only apply to the working directory and the index version of files can change to whatever git decides? So in the example above would "m" be the HEAD~1 version of the file in the index or the HEAD version before the reset? Does this apply to all git commands, merge, rebase, cherry-pick, etc? What about when there is a merge conflict with a file that is outside the sparse checkout?

Seems to me it is a lot more complex than only caring about the files in the sparse checkout and no concern for anything else. Personally I would like to error on the side of letting the user decide what they want to do, even if that means turning off the skip-worktree bit and putting the working directory into an expected state.

Previous: Jacob KellerNext: Junio C Hamano
Message 18 of 23 in “reset: fix mixed reset when using sparse-checkout”
  1. 0/1 reset: fix mixed reset when using sparse-checkoutKevin Willford, Sep 8, 2017
  2. 1/1 reset: fix reset when using the sparse-checkout feature.Kevin Willford, Sep 8, 2017
  3. Torsten BögershausenSep 8, 2017
  4. Junio C HamanoSep 8, 2017
  5. Junio C HamanoSep 8, 2017
  6. Kevin WillfordSep 8, 2017
  7. Junio C HamanoSep 8, 2017
  8. Kevin WillfordSep 8, 2017
  9. Junio C HamanoSep 9, 2017
  10. Kevin WillfordSep 9, 2017
  11. Junio C HamanoSep 11, 2017
  12. Johannes SchindelinSep 11, 2017
  13. Junio C HamanoSep 12, 2017
  14. Kevin WillfordSep 12, 2017
  15. Jacob KellerSep 12, 2017
  16. Kevin WillfordSep 12, 2017
  17. Jacob KellerSep 13, 2017
  18. Kevin WillfordSep 13, 2017
  19. Junio C HamanoSep 13, 2017
  20. Kevin WillfordSep 14, 2017
  21. Junio C HamanoSep 15, 2017
  22. Kevin WillfordSep 15, 2017
  23. Jacob KellerSep 15, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.