On 1/21/2020 7:42 PM, JunkYardMail1 wrote: > I have a shallow repository clone and using sparse-checkout of just a > handful of directories. When I upgraded from git version 2.24.1 to 2.25.0 > some files not in the sparse-checkout were staged to be deleted. The > directory path of these files contain the Windows reserved name of "prn". > Ex: "japanese/prn/. . ." Unable to un-stage these files and reset the > changes. Are you using Git for Windows? I'm not sure why the "prn" would be important otherwise. > !/*/ > /*/directory-*/ I don't see anything complicated with these patterns, although they seem a bit strange. Why would you not want anything in a directory except one named "<something>/directory-<anotherthing>/"? Is this actually the exact pattern set? > Reverting back to the previous version (2.24.1) allowed to un-stage the > files and reset the changes. This is definitely pointing to a regression, and the feature did get a bit of an overhaul. The goal was to not change how existing users interacted with it, though, so this is a bit alarming. I did find a behavior change related to these paths in Git for Windows 2.25.0 versus 2.24.1: $ git clone https://github.com/derrickstolee/git-sparse-checkout-test Cloning into 'git-sparse-checkout-test'... remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 Receiving objects: 100% (6/6), done. error: invalid path 'directory-1/prn/a' fatal: unable to checkout working tree warning: Clone succeeded, but checkout failed. You can inspect what was checked out with 'git status' and retry with 'git restore --source=HEAD :/' The checkout here is _expected_ to fail, due to the protected filenames. What is troublesome is the following sparse-checkout commands fail, and the read-tree command fails in a way that 2.24.1 does not: $ git sparse-checkout init error: invalid path 'directory-1/prn/a' error: invalid path 'directory-1/prn/a' $ git sparse-checkout set "/*" "\!/*/" error: invalid path 'directory-1/prn/a' error: invalid path 'directory-1/prn/a' $ git read-tree -mu HEAD error: invalid path 'directory-1/prn/a' The double error messages are due to the "try with an in-memory pattern set, then roll back if there is a failure." The patterns we are trying to create do not include the directory that is failing. I'll keep looking into this. Thanks, -Stolee