本站的贴子修改历史记录功能是如何实现的?

本站discourse有个好用的功能,发布的贴子,发出去后才发现有不对的地方立即修改(两分钟以内?)不会被记录下来,但过个几分钟后在来改,就会把修改的历史记录都记录下来,某些贴子修改个十几次都可以方便的查看历史记录以及对比。

类似这样的版本控制相关的功能都是用git来实现的吧,discourse有使用git来实现这个功能吗?我查到discourse使用的是PostgreSQL关系型数据库,discourse是不是有自己的实现呢?还是discourse同时在使用数据库和git,(比如从数据库取出数据放入git里面这样的操作),又或者数据库自带有版本控制功能

问这个问题是因为我的org文件大都没有存放在git里面,而是存放在数据库(sqlite)里面的,链接见这 ,这样也就没有了版本控制功能。

随着我的org文件的数据与日俱增,现在对部分org文件也想要这个功能了。但是又想不出来一个好的实现方式,于是想效仿本论坛贴子的实现方式,希望对此有了解的坛友能给予指点

翻翻 discourse 源码咯

看起来就是存数据库里

Git 并没有直接实现这功能而是调用 diff。命令行下的 diff 用 colordiff 就是了。Discourse 显然就是用了个 JS 实现的 diff,如 https://github.com/kpdecker/jsdiff。

每个版本都存一个就是了。如果你想问有没有占用空间优化,Git 除了用GZ压缩以外也没用別的。再具体一点的话,从 sqlite 导出两个版本到 tmpfile 再用 diff 比较,把这个操作写成工具应该就行了。

1 个赞

发现一个东西dolt GitHub - dolthub/dolt: Dolt – Git for Data , 对数据库中数据进行版本控制,而不是对文本文件进行版本控制。按文档讲的 It's like Git and MySQL had a baby 好像就是我想做的事,不知道怎么样,本坛有没有人知道

1 个赞

现在采用了每点一次"保存修改"都把org文件在数据库里存一次,点击删除按钮也先存一次在删除(这不太像删除),这样是不会在丢东西了,使用了有一周,发现数据库大小就翻了一倍,但也不差空间

1 个赞