【发布时间】: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