Yes. Using git for Windows with bash terminal and Git Extensions GUI. The reason for the sparse checkout pattern is that the repo is very large, approximately a gigabyte, and I only need of few sub-directories that amount to only about 60 megabytes. The first sparse checkout rule "!/*/" is expected to exclude everything. The second sparse checkout rule "/*/directory-*/" is expected to include only sub-directories that contain "directory-" as the leading part of a directory element. Looks like you're able to reproduce the issue and are hot on the trail. Thanks. -----Original Message----- From: Derrick Stolee [mailto:stolee@xxxxxxxxx] Sent: Tuesday, January 21, 2020 5:19 PM To: JunkYardMail1 <JunkYardMail1@xxxxxxxxxxxx>; git@xxxxxxxxxxxxxxx Subject: Re: Sparse Checkout Trouble (2.5.0) 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