【问题标题】:version control for binary files二进制文件的版本控制
【发布时间】:2016-05-06 08:22:33
【问题描述】:

我正在编写一个程序,该程序将使用自己的二进制格式来存储数据。

我想让某种形式的版本控制成为可能,至少两个不同的人应该能够对文件进行更改,然后合并这些更改。

由于 git 似乎是一个非常常见且非常强大的版本控制系统,所以我想知道是否可以使用它。我只有 git 的基本知识(pull add commit push),但我知道它有更高级的功能。我想了解我是否可以实现一些基本功能并免费获得所有高级功能。

所以用例是每个项目都包含一个单独的二进制文件,并且 git 必须能够使用它。

我一直在搜索并且明白我必须编写一个自定义合并工具?我的理解正确吗?

我也知道三路合并是由 diff3 程序完成的,或者至少 git 嵌入了一些功能。我必须编写它的自定义版本吗?甚至可以将它与git一起使用吗?是否需要重新编译git?

git 还将提交存储为更改以节省空间。它使用 diff 吗?有可能更换吗? git需要重新编译吗?
我还需要实现其他类型的功能吗?
我最初的计划是为项目使用单个文件,但每个项目都由独立的子项目组成,这些子项目将独立合并。通过将项目存储为每个子项目的不同文件,我会获得什么吗?

是否有关于 diff 、 diff3 和 mergetool 必须符合的接口的一些好的文档?这些可以用哪些语言编写?

我很困惑,因为似乎每个人都对从版本控制中删除二进制文件感兴趣,而且显然没有人想在它们上使用 git。这是个坏主意吗?我觉得任何类型的数据都应该以某种方式进行合并。

【问题讨论】:

  • "git also stores commits as changes in order to save space." 这不是真的。 Git 将每个文件的全部内容存储为单独的 blob,并为每个 blob 计算哈希以进行快速比较。
  • @nishanths: 是的,但它也会压缩其数据,因此它实际上并没有最终存储每个文件的每个修订版的全部内容。

标签: git diff binary-data mergetool diff3


【解决方案1】:

所以用例是每个项目都包含一个单独的二进制文件,并且 git 必须能够使用它。

有用于处理二进制文件的 3rd 方工具。


但是每个项目都是由独立的子项目组成的

在 git 中有子模块 && 子树用于此目的

git submodule add only pick latest Commit


是否有关于 diff 、 diff3 和 mergetool 必须符合的接口的一些好的文档?

这些可以用哪些语言编写?

读出来,这里有 diff2 & diff3 算法的参考
What is the diff version git use? diff2 or diff3?

【讨论】:

  • 关于第 1 部分:a 我试图在我的第一篇文章中解释 Git 大文件存储正是我不想要的。这是项目的唯一文件,是我要合并的文件。
  • 关于第 2 部分:子模块是否必须是不同的文件?正如我所说,我希望有一个文件
  • 在 git 中存储大文件是一种不好的做法,所以 #1 是可选的,但你应该使用它,因为它是一个很好的做法。 #2- 子模块有一个文件,它设置了源+文件夹,但它与代码的其余部分在同一个仓库中
  • 关于第 3 部分:感谢有用的链接,但我的问题仍然存在:是否可以使用另一种算法来生成与所提议的 4 种不同的差异?它必须用C编写吗?是否需要重新编译 git?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多