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

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

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

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

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

翻翻 discourse 源码咯

https://github.com/discourse/discourse/blob/30990006a92bd64eb6c49dc3139a17ce8fd1dc89/app/models/post_revision.rb

看起来就是存数据库里

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

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