【问题标题】:Programmatically create a diff patch using git2使用 git2 以编程方式创建差异补丁
【发布时间】:2022-11-12 15:02:52
【问题描述】:

我想要一个接受两个字符串并生成差异补丁字符串的函数,即git diff foo

我正在开发一个带有历史的 wiki 风格的系统。为了实现历史,我认为只存储文档补丁内容而不是每个版本的文档的完整副本是有效的。重播补丁似乎是重现文档任何版本的好方法。 git 已经做得很好了。我想使用 git 的版本控制功能,而不是为每个文档创建 git 索引,而是将我的数据库用作功能较弱的版本存储。

我打算使用https://docs.rs/git2/latest/git2/index.html,但还不知道:

  • 如何在 mem 中创建一个空的 git 索引
  • 将我的文档 v1 加载到 git 索引中
  • 区分我的文档 v1 和文档 v2
  • 提取补丁文件文本

任何建议都会很棒!我也使用 libcgit2 进行标记,因为尽管使用了 rust,但我相信我可以将 C 示例移植到 rust 绑定。

【问题讨论】:

  • 为什么不直接使用真正的 Git 存储库? Git 已经非常擅长优化事物。
  • 设计约束要求我的单个数据存储是一个 sqlite 数据库

标签: libgit2 git2-rs


【解决方案1】:

如果您的数据没有存储为 git 存储库,那么 libgit2 不是帮助您的最佳工具。但如果您确实想存储为 git repo,它是一个很好的库。

如果你想在 Rust 中区分两个文本,你最好使用 https://crates.io/crates/diffhttps://crates.io/crates/slice-diff-patch 之类的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多