是否可以将 git 使用的换行符更改为默认n
以外的其他值(例如句点.
或句点加空格(?
我问是因为这样可以更轻松地使用 git 来管理文本文件,例如文档和降价文件。我看过一些文章建议人们将每个句子放在自己的行中,以便 git 将其视为一个单元(而不是较长段落的一部分(,这很尴尬。因此,这里有一个问题。
我做了一些互联网搜索无济于事。
有趣的想法!但对不起,没有。
我赞成你的问题,因为我喜欢这个想法。不幸的是,答案是:不,Git 不支持这一点。
如 git 配置文档中所述,core.eol
的有效值是lf
和crlf
:
设置要在工作目录中用于标记为文本的文件的行结束类型(通过设置 text 属性,或者通过让 text=auto 和 Git 自动将内容检测为文本(。替代方案是 lf、crlf 和 native,它们使用平台的原生行尾。默认值为本机值。参见 gitattributes[5] 以了解有关下线转换的更多信息。请注意,如果 core.autocrlf 设置为 true 或 input,则会忽略此值。
其他相关的 git 配置设置是core.safecrlf
和core.autocrlf
。 gitattributes 文档也说了同样的话。
为什么 Git 不太可能支持这一点
lf
和cf
是具有非常特定含义的控制字符。句点.
等常规字符具有多种含义,具体取决于上下文。在许多语言中,它标志着句子的结尾。但它在数字上意味着不同的东西。...
通常用作省略号,不是三个句子结尾。
因此,支持此类选项的 git 会导致存储在 git 存储库中的许多文本文件一团糟。
解决方法:使用 Git 提交hook
在文本文件中没有句点的每个句点后自动插入lf
。
这将是一个非常简单的正则表达式。
通过尝试这种方法,您会发现以下两件事之一:
-
(a( 酷,它对我有用!我的文件仍然是普通的文本文件,我的存储库仍然是正常的,因此其他人可以使用它。
-
(b(哇,现在我知道他们为什么不支持这个了。真是#$*&#@CRLF一团糟!
为什么你真的不需要这个
之所以有"文章建议人们将每个句子放在自己的行中",是因为git diff
用于仅支持行粒度差异。行差异非常适合代码,但对于散文来说很糟糕。插入一个句子甚至编辑一个单词会导致整个段落被标记为已更改,除非该段落被分解成行。
但是git diff
现在支持单词粒度,如果您使用--word-diff[=<mode>]
、--word-diff-regex=<regex>
或--color-words[=<regex>]
选项。
键入git help diff
或查看 git-diff 文档以获取更多信息。