Linus Torvalds wrote: > > On Tue, 22 Nov 2005, Chuck Lever wrote: > >>there are some things repacking does that breaks StGIT, though. >> >>git repack -d >> >>seems to remove old commits that StGIT was still depending on. > > > If that is true, then "git-fsck-cache" probably also reports errors on a > StGIT repository. No? Basically, it implies that the tool doesn't know how > to find all the "heads". indeed. this is one area where StGIT is "not safe" to use with other porcelains. these raw GIT commands can show a bunch of confusing "dangling references" type errors, or actually modify the index in ways that eliminate StGIT-related commits that aren't currently attached to any ancestry. (i think Catalin mentioned these are related to the unapplied patches in a stack, but there could be others; see below). > The preferred way would be to just list the references somewhere under > .git/refs/stgit, in which case fsck and repack should pick them up > automatically (so clearly stgit doesn't do that right now ;). that could be an extremely large number of commits on a large repository with a lot of patches that have been worked on over a long period. so whatever mechanism is created to do this needs to scale well in the number of commits. > It also implies that doing a "git prune" will do horribly bad things to a > stgit repo, since it would remove all the objects that it thinks aren't > reachable.. yup. been there, done that. lucky for me i have an excellent hourly backup scheme. >>git repack -a -n >> >>seems to work fine with StGIT, > > > Well, it "works", but not "fine". Since it doesn't know about the stgit > objects, it won't ever pack them. ah! > But maybe that's what stgit wants (since they are "temporary"), but it > does mean that if you see a big advantage from packing, you might be > losing some of it. actually, those commits aren't all that "temporary". the history/revision feature i'm working on would like to maintain all the commits ever done to an StGIT patch. the only time you can throw away such commits is when the patch is deleted or when it is finally committed to the repository via "stg commit". otherwise, keeping these commits in a pack would be quite a good thing. maybe the first thing to do is to get a basic understanding of an StGIT commit's lifetime.