Hi Elijah, On Mon, Jan 13, 2020 at 10:55 PM Elijah Newren <newren@xxxxxxxxx> wrote: > 1) You can rewrite history, and then use replace references to map old > commit IDs to new commit IDs. This allows anyone to continue using > old commit IDs (which aren't even part of the new repository anymore) > in git commands and git automatically uses and shows the new commit > IDs. No problems with fsck or prune or fetch either. Creating these > replace refs is fairly simple if your repository rewriting program > (e.g. git-filter-repo or BFG Repo Cleaner) provides a mapping of old > IDs to new IDs, and if you are using git-filter-repo it even creates > the replace refs for you. (The one downside is that you can't use > abbreviated refs to refer to replace refs, thus you can't use > abbreviated old commit IDs in this scheme.) > This is the path we're considering taking unless something easier comes out of this (or other) proposal(s). We're working on determining compatibility with tools. Thanks for the pointer to git-filter-repo. It looks great! > Instead of inventing yet another partial-clone-like thing, it'd be > nice if your new mechanism could just be implemented in terms of > partial clones, extending them as you need. I don't like the idea of > supporting multiple competing implementations of partial clones > withing git.git, but if it's just some extensions of the existing > capability then it sounds great. But you may want to talk with > Jonathan Tan if you want to go this route (cc'd), since he's the > partial clone expert. I agree that it isn't worth inventing another partial clone like feature. It sounds however, like something based on partial clone will not solve the problem on the "server"? or perhaps I'm missing something (as I've not had a chance to check out the implementation yet). While I'm not at all insisting that `git-blacklist` be the way to achieve it, we'd (Twitter) like to be able to permanently get rid of the objects in question while retaining the ability to run GC and FSCK on all copies of the repository, preferably without having to rewrite history. Even merely making `--no-replace-objects` be FALSE by default for GC and FSCK (and printing a warning instead), while retaining existing behavior when it is explicitly requested, would significantly improve `git-replace`'s usability (for this purpose). The bits related to ref transfer in my proposal are optional. Git users can either be required to explicitly fetch the refs/replacement namespace (as they do today), or we could print a message (at the end of clone), letting the user know that there are replacements available on the server. I'd only proposed a new command as changing `git-reaplce` thus, would break backward compatibility. -- Kaushik