Hello Elijah, Sunday, August 1, 2021, 3:27:07 AM, you wrote: > Hi Eugen, > On Sat, Jul 31, 2021 at 2:56 AM Eugen Konkov <kes-kes@xxxxxxxxx> wrote: >> $ git checkout 51c7d41b82b5b >> error: Your local changes to the following files would be overwritten by checkout: >> lib/Mojo/IOLoop/Stream.pm >> Please commit your changes or stash them before you switch branches. >> Aborting > The error seems quite reasonable to me...but can I ask how you got > into this state? > There's two ways I know of: > 1) Setting a sparse-checkout to only have certain paths, and then > recreating a file outside the sparsity paths anyway. > 2) Trying to adjust your sparse-checkout to have a different set of > paths, then hit Ctrl-C while it is in the middle of running. > Did you do one of these? If not, what'd you do? If so, which one? > I've only had confused users come to me when they did the latter; they > apparently assumed Ctrl-C would abort the operation and return to the > previous state, but it does not -- whatever was successfully checked > out before they hit Ctrl-C remains written to the working copy, but > the .git/info/sparse-checkout file is updated last so the system > continues assuming the old checkout. I wonder if we need to add some > special Ctrl-C handling inside sparse-checkout adjustments or > something. >> $ git checkout lib/Mojo/IOLoop/Stream.pm >> error: pathspec 'lib/Mojo/IOLoop/Stream.pm' did not match any file(s) known to git > This error message is clearly suboptimal and should be improved. > Alternatively, though, we could perhaps change the behavior so that > when in a sparse-checkout and the file(s) that match are SKIP_WORKTREE > but present anyway, we could just remove the file from the working > copy (i.e. make it match the index). >> $ git add lib/Mojo/IOLoop/Stream.pm >> The following pathspecs didn't match any eligible path, but they do match index >> entries outside the current sparse checkout: >> lib/Mojo/IOLoop/Stream.pm >> hint: Disable or modify the sparsity rules if you intend to update such entries. >> hint: Disable this message with "git config advice.updateSparsePath false" > The error message is correct, but this is the case Stolee was talking > about recently where it'd be good to add an override to "git add" to > allow adding it anyway and add information about using that option to > this error message. >> $ git --version >> git version 2.32.0 >> Here I do not understand how to checkout to different commit >> or how to commit the subject file > I'll give you three different ways you should be able to do it: > 1. Since you wanted to just restore the file to the version in the > index (as per your `git checkout lib/Mojo/IOLoop/Stream.pm` command), > you can simply delete the file (`rm lib/Mojo/IOLoop/Stream.pm`) and > everything would be fine. > 2. You could change your sparsity paths to include this file so it > doesn't think it should be excluded from the working tree, e.g. `git > sparse-checkout add lib/Mojo/IOLoop` or even `git sparse-checkout add > lib/Mojo/IOLoop/Stream.pm`. That'd be most useful if you made > important edits to the file or want to continue editing the file and > committing changes in it. > 3. You could just disable the sparse-checkout entirely (`git > sparse-checkout disable`). That'd make it so you don't have to worry > about this path or any other being simultaneously excluded and present > in the working tree. You should be able to fix things up normally. > And, if you want, when you're done fixing things up, then set up a > sparse-checkout again. >> It would be nice to show hint about how to exlude this file from unindex > Yes, we need to improve some error messages here (and perhaps tweak > some behavior as well). Thanks for the report. >>Thanks for the report. Thank you for the support! > Did you do one of these? If not, what'd you do? If so, which one? None of these. I even do not remember sharp command how I fall into this. This were two or three months ago... I just remember that I have added this file to "ignore" it from tracking: git update-index --assume-unchanged lib/Mojo/IOLoop/Stream.pm This feature is like: hide file from output. Git do something with this file so it is tracked in some way but just is not displayed when `git status` command is done. So it would be nice if I can do: git hide lib/Mojo/IOLoop/Stream.pm and this file is hidden from output. But `git status --verbose` will show it anyway. Compare: git status Changes to be committed: (use "git restore --staged <file>..." to unstage) 1 modified: cpanfile.snapshot Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) 2 modified: ext/Auth/Mojolicious/Plugin/Auth.pm 3 modified: front/readme.txt Untracked files: (use "git add <file>..." to include in what will be committed) 4 .prove git status --verbose Changes to be committed: (use "git restore --staged <file>..." to unstage) 1 modified: cpanfile.snapshot Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) 2 modified: ext/Auth/Mojolicious/Plugin/Auth.pm 3 modified: front/readme.txt Untracked files: (use "git add <file>..." to include in what will be committed) 4 .prove Files hidden from output: (use "git unhide <file>...." to unhide these files) 5 lib/Mojo/IOLoop/Stream.pm I am not expert, this is just my user point of view. Probably there alredy some exisisting interface. I just outline how it would be handy from my point. Also this topic seems hot: https://stackoverflow.com/questions/936249/how-to-stop-tracking-and-ignore-changes-to-a-file-in-git -- Best regards, Eugen Konkov