Replies: 6 comments
-
Hmm can you elaborate on this question? I am not sure which shortcoming of jujutsu you are talking about; I don't use it, and I only mentioned its approach to git compatibility in the docs. Do you mean that jujutsu encourages rebase-heavy usage, which can affect collaboration with git users because your history diverges? Xit doesn't exactly have a strong answer to this issue because I haven't even implemented rebase yet :^D It will not be that hard, though...rebase is pretty much just
I think a combination of these two systems is possible, and that's what I'm going for with xit. As far as I know, xit is the very first VCS that can do patch-based merging while also is compatible with git. This is possible for one simple reason...patches can always be derived from commits. There is no extra information needed than what is provided in standard git objects. Nonetheless, I don't know of anyone that has tried this, so it's uncharted territory.
Pretty much all the functionality in the TUI will also be available via the CLI and programmatically via the
Files are automatically considered binary if they contain invalid UTF-8 data. Maybe that's too narrow of a definition but it was an expedient choice, and easy to change. But actually, this distinction is only relevant for when xit creates a diff (for I have no plans for storing files out of band, though. For now I'm only solving the client-side half of the problem -- how to best store large binary files in the object store. I think storing files out of band requires server-side work which I'm not prepared to do right now.
In xitdb data is organized using the hash array mapped trie from Phil Bagwell. So, each transaction shares data with the previous transaction; only the parts that changed require more disk usage. Nonetheless, there is no garbage collection right now; the plan is to have a feature such as
I'll keep the implementation pretty stupid at first; I'm not sure I'll be able to make it safely undo arbitrary actions from the past rather than just the last N transactions in the db. The latter is much more straight-forward; in fact, in xitdb it is just a pointer copy. Making it undo some arbitrary transaction from the past is much harder, because as you point out, it can conflict with something that happened after.
I just updated the readme to add a "status:" line under each major bullet point. It's not that specific but hopefully it helps set expectations. I'm not sure how specific I want to be about roadmap. For at least the next several months, I am just going to focus on getting things to work and getting universal undo out the door; it's hard to look further into the future than that. I have every intention of making a serious git successor, and my approach is "evolution, not revolution". I don't want to change everything about git. I actually think they made a lot of great decisions. I'd rather choose a few key areas to improve (built-in TUI, patch-based merging, handling large files, undo) and keep most of the rest the same. After building a solid foundation, we can start to depart from git in other ways, but it's a bad idea to change too many things at once. |
Beta Was this translation helpful? Give feedback.
-
|
Re |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for your fast and in-depth reply and status.
Say person A and B work on a feature branch f1 and person A has a xit history xa, person B has xb. Person A has pushed, person B rebases f1 and person A now tries to reorder things without merge conflicts. Potentially a worse problem appears, if person B would squash its own changes into f1, for example because person A introduced an untested regression on some arcane platform. A similar problem or question appears on deciding, when person A should actually clean its data base. To me this indicates some additional locking/info is needed to specify to the server, when the server should merge, clean or indefinitely keep between-commit histories. Jujutsu (like your tool) offers a local optimum regarding its solution, which makes it to me not justified to learn yet another tool. If jujutsu/your tool would at least theoretically describe how such merging logic can work, then I'd use it to eventually get the benefits from my expectation that it will be eventually solved. Does this make sense to you?
Sounds reasonable for most use cases, since fetching/syncing out of band data can also be solved via a good build system.
Sounds reasonable to me. |
Beta Was this translation helpful? Give feedback.
-
Well we need to be more specific about what database history refers to here. Are you referring to the local undo history? Or to the actual git history (the tree of commits)? I'm not sure how the local undo history would present a unique problem here. When you perform a fetch in xit, it creates a new transaction in xitdb and thus a new item will appear in your undo history. If you fetch a feature branch that has been rebased, that transaction will include the change to that remote ref. Patch-based merging will still work fine, even if the commits from that remote ref were rebased; it may need to generate new patches but it will still work. In xit, all repo state is stored in |
Beta Was this translation helpful? Give feedback.
-
I wanted to refer to the local undo history. |
Beta Was this translation helpful? Give feedback.
-
|
Gotcha. I'll move this to a discussion. Thanks for the questions. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Motivation
This project looks very interesting and I am curious, if "universal undo" could be used for incremental verification (or other incremental program related executions like static/dynamic analysis or faster interactive proof inputs) by tracking all editor changes between user-specified snapshots to at least estimate or ideally compute the semantic difference between program changes.
Afaiu, currently the best one can get is decl/fn based invalidation and transitive recomputation of according proofs.
Not sure, if this is the correct place to do in-depth discussion and how you can be reached. Feel free to close or move to "Discussions".
That said, I have a few questions
It would be nice, if there could be a roadmap and/or general overview of what things work and what things not to set properly user expectations.
Beta Was this translation helpful? Give feedback.
All reactions