4 ms·
>A recent paper suggested a new mathematical point of view on version control. I first found out about it from pijul, a new version control system (VCS) that is
by fouc 7y ago
>A recent paper suggested a new mathematical point of view on version control. I first found out about it from pijul, a new version control system (VCS) that is loosely inspired by that paper.
https://jneem.github.io/merging/ https://jneem.github.io/merging/
- eru 7y agoCompare https://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory https://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theo...
- dan-robertson 7y agoI think this is quite relevant to the problem. Whatever your data is, you need a way to merge it, but the format of allowable patches and the algorithms used must surely depend on the data structure. Imagine first a set of strings. This may be merged more easily than the list of lines a dvcs usually deals with but you still get conflicts (I’m not sure what the merge of “add foo” and “add foo; remove foo” should be. It could reasonably be “add foo; remove foo” or a conflict of maybe adding foo) Now imagine some kind of recursive structure (say a unix filesystem structure except the files are all empty). It seems hard to come up with a model for patches that will work well with things like removing directories or moving subtrees. Are these different patches/ move the contents of a directory too to another newly created directory and then delete the first directory move a directory to a new place How would these merge with creating a new file under the directory before things are moved? For a set of relations, you want merging to preserve properties of primary and foreign keys. I’m not sure what merging that would look like. These all sound like interesting hard problems. I’m not so convinced that their solution would be particularly useful.
- User23 7y ago> Imagine first a set of strings. This may be merged more easily than the list of lines a dvcs usually deals with but you still get conflicts (I’m not sure what the merge of “add foo” and “add foo; remove foo” should be. It could reasonably be “add foo; remove foo” or a conflict of maybe adding foo) My imagination is pretty confused by the application of a binary operator with only one argument. Would you please clarify? I think you'll find that when you explicitly think about the unstated arguments the problem makes sense, but I could be misunderstanding your point.
- dan-robertson 7y agoThe point, as per the article mentioned in the parent comment, is to talk about merging patches rather than snapshots. This allows you to force certain nice properties of merges like associativity. Sometimes you need information about deleted things in your patch to be able to merge correctly though I don’t have an example from the top of my head