【发布时间】:2019-08-10 10:50:18
【问题描述】:
我将文本文件用作一种非常简单的数据库,它只包含 NUL 分隔的字符串。我想通过 git 来管理这些文件,作为文本。
这是一个示例文件(^@ 表示 NUL):
Tlrl-ng tl tlu
^@aget does not wait for all forked processed. Probably unsolable unless we invoke zsh -c
^@webhook siri
^@login as peter
如果这是不可能的,那么我应该使用什么字符来代替 NUL?记录可以是多行的。
请注意,我需要git-merge 才能将这些文件视为普通文本。我使用 gitattribute * merge=union diff text.
【问题讨论】:
-
将
text添加到文件的 gitattributes 条目中,Git 会将文件提供给diff并尝试显示它。请注意,NUL 可能无法很好地显示,并且可能会混淆其他面向文本的程序。如果我需要包含所有字节的多行记录,我可能只是以某种方式对整个文件进行编码,而不是将原始字节放入文件中...... -
@torek 喜欢“*文本”吗?
-
你可以这样做。但是在一行中列出所有属性会更有效:例如,
* text merge=union。值得考虑:联合合并是一个非常愚蠢的合并算法,所以你应该小心使用它。 -
@torek 没用。
warning: Cannot merge binary files: attic/.attic_todo ((null) vs. (null)) Auto-merging attic/.attic_todo. -
有趣:联合合并不允许 NUL 字节有点令人惊讶。这也许并不完全令人惊讶,尤其是如果它是用 C 语言编写并使用 NUL 终止的字符串时。不过,对文件进行编码将解决所有问题。
标签: git text git-merge utf nul