On Wed, Jun 05, 2024 at 04:43:45PM -0700, Fred Long wrote: > On 6/5/2024 1:47 AM, Jeff King wrote: > > > > Your local refs should not point to missing objects, though. Each clone > > should maintain its own consistency. Are you using "git clone --shared" > > or another scheme involving alternates? > > > I use Google's "repo" script to manage Android repositories. The "repo" > script runs "git repack -a -d", and I think that's what's removing the > commits locally. Remotely, our bitbucket server removes commits that are no > longer referenced. Using "git repack -a -d" by itself should retain the objects that are reachable from your local refs/remotes/ refs. But I'd suspect that "repo" is doing something clever under the hood. I know there's some support for alternates, and a quick (hah!) "repo init && repo sync" on the android manifest shows that we end up symlinked objects directories. So there is ".repo/projects/foo.git" whose objects directory is a symlink to ".repo/project-objects/foo.git/objects". I don't know how it is all supposed to work, but naively running "git repack -a -d" in the "project-objects" version risks corrupting the "projects" version, because it has no idea what refs are in the latter. Certainly this warning is ominous: https://gerrit.googlesource.com/git-repo/+/refs/tags/v2.45/docs/internal-fs-layout.md#project-objects -Peff