Replies: 1 comment 6 replies
-
Thanks so much for bringing this up! Promisor objects have been a phantom to me that showed up in the git codebase, but I never found any actual documentation for it. The link you provided has already proven incredibly valuable.
This is really interesting to hear! I always felt that, at least for big files, packs aren't great especially when repacking, but probably one can 'just' be smart about the way one organizes packs. Big objects could go into their own packs, and once they are beyond a certain size one could leave them alone and start a new one (instead of rewriting them). With this in mind, I also think this could be something, but… I also feel that for big files I want a file system and a protocol to efficiently sync multiple remotes for them.
No, they have been too ominous for that. But that changed today and they are on my radar now. Intuitively I say they should be supported, but only in a minimal fashion at first. With that in mind, Such an addition should happen ideally when various items of "Future Work" have been defined and implemented. Right now, I see so many issues with promisor packs that I don't think they should be implemented now.
For what I need out of But if everything goes according to plan, Those parties will be welcome to contribute such a feature, of course. PS: I was contemplating with 'minimal support', which would mean to handle the promisor system to not fail, even if it would be slow and inefficient. But that I discarded as 'minimal' is likely unusably slow, while the feature isn't needed for the majority of the user-base in the first place. |
Beta Was this translation helpful? Give feedback.
-
Hello!
I know partial clones (and promisor packfiles) is listed on the roadmap, which is fantastic. I know I'm not alone in my belief that partial clones will become the successor to LFS, and the only reasonable way to handle large repositories at scale. That said, I wanted to ask if there's been any discussion into designing components of gitoxide in a way that will make implementing partial clones easy without sacrificing performance when working with a partial clone.
Partial clones in
git
are... functional. They are awesome at the surface, making clone times orders of magnitude faster than full clones, but as you keep using them for daily work, it soon becomes obvious that they were retrofitted intogit
in a far less-than-ideal way. This is well documented in this section of the git docs. The vast majority of operations ingit
have not been "optimized" for partial clones, and the result of this is beyond painful... Commands likegit blame
orgit rebase
will end up trying to fetch each promisor object eagerly as it's encountered, which results not only in a round-trip to the remote for each missing object, but also a completely new SSH/HTTPS session. I've developed some custom tooling to help with this by determining which objects would be missing for a specific command to complete, and then fetching them in a single request, but this is clearly far less than ideal.Has there been any consideration into how this may all work with gitoxide? For partial clones to work well, each operation needs to be able to first resolve a set of promisor object IDs that it needs, then should go fetch them all in one big request, and should then finally carry on with the operation. From what I can tell, it seems like gitoxide hasn't yet implement too much functionality that would be impacted by this (
checkout
is one exception I'm aware of). But before I dive into anything, I'd love to know if there are any existing plans/designs around this.Appreciate any thoughts anyone may have on this!
Beta Was this translation helpful? Give feedback.
All reactions