Re: How do I clear the directory cache
Dear diary, on Fri, Oct 21, 2005 at 05:23:28AM CEST, I got a letter where eschvoca <eschvoca@gmail.com> told me that...
> Yes, "cg-reset --adds-removals" is what I want (how do I do this with
> pure git?).
git-read-tree HEAD
git-update-cache --refresh
Show 10 quoted lines
> I would like to clear/reset the index because I've screwed it all up.
> I don't think I can do as you suggested because of the way I got into
> this mess.
>
> I'm using git/cogito to version control my hard drive and I've been
> gradually adding more entries into the .gitignore file because some
> files change too frequently or I don't want them backed up. The OS
> modified a bunch of files, I cg-rm'd 1/4 of them, then I changed my
> mind and added them back, also did some genuine cg-adds, etc. and now
> I'm all confused (it's a whole hard drive).
Well, cg-status should show you what you effectively did, and then you could just do something like:
cg-status -w | grep ^D | tr '\n' '\0' | xargs -0 cg-add
cg-status -w | grep ^A | tr '\n' '\0' | xargs -0 cg-rm
Show 12 quoted lines
> If other people are interested in doing this I can pass on the lessons
> I learned.
>
> What I found it git is amazingly fast! cg-status only takes a few
> seconds. I think there are some problems if you try to do:
>
> cd /
> cg-add -r usr
> cg-commit -m "take a long break"
>
> It seems that cg-add-ing and cg-commit-ing smaller chunks is faster
> than one big chunk.
Interesting. I cannot spot anything which would bog it down in Cogito. Is both cg-add and cg-commit significantly slower? (That is, if it takes longer than sum of the smaller chunks.) Perhaps it's a cache issue, not everything from the chunk fits into your cache during cg-add, so cg-commit has to reread it from the disk.
> I think commands for the following should be added to cogito:
> cg-status -<status_flag> # list files with given status flag (without
> status flag in column 1)
> git-ls-files [--others|--deleted|etc] --exclude-per-directory=/.gitignore
All right, this might be useful. Implemented as cg-status -s '?' and such, thanks for the idea.
Show 8 quoted lines
> cg-add [-r] -<status_flag> # add files with a given status flag
> git-ls-files [--others|--deleted|etc]
> --exclude-per-directory=/.gitignore | while read i; do cg-add "$i;
> done
>
> cg-rm [-r] -<status_flag> # you get the idea.
>
> cg-addremove # recursively add new files, remove deleted files
I implemented the cg-reset --adds-removes option, but I don't feel comfortable with the cg-add change - just -r would be enough to add new files, and if you are in mess big enough, you can just cg-reset. It would be useful to make cg-rm symmetric to cg-add, though. Then you could do just
cg-add -r . && cg-rm -r .
and it would be equivalent to cg-addremove.
> I use "while read i" so it will work with spaces in filenames.
And break with leading spaces unless you modified $IFS properly. Note that those people having filenames starting by spaces are either seriously sick or script kiddies who just rooted you (or warez kiddies on your FTP server with anonymously-writable incoming).
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.