可以将 git 换行符更改为句点(以获得更好的基于句子的差异)吗?

tho*_*hor 4 git text plaintext

是否可以将 git 使用的换行符更改为默认值以外的换行符\n(例如句点.或句点加空格)?

我这样问是因为这将使使用 git 管理文本文件(例如文档和 Markdown 文件)变得更容易。我看过一些文章建议人们将每个句子放在自己的行中,以便 git 将其视为一个单元(而不是较长段落的一部分),这很尴尬。因此这里的问题。

我做了一些互联网搜索但无济于事。

vas*_*vas 5

有趣的想法!但抱歉,没有。

\n\n

我赞成你的问题,因为我喜欢这个想法。不幸的是答案是:不,Git 不支持这一点。

\n\n

如git config文档中所述,core.eol和 的lf有效值为crlf

\n\n
\n

设置在标记为文本的文件的工作目录中使用的行结束类型(通过设置文本属性,或者通过设置 text=auto 和 Git 自动将内容检测为文本)。替代方案有 lf、crlf 和 native,它们使用 platform\xe2\x80\x99s 本机行结尾。默认值是本机。有关行尾转换的更多信息,请参阅 gitattributes[5]。请注意,如果 core.autocrlf 设置为 true 或输入,则忽略此值。

\n
\n\n

其他相关的 git 配置设置是core.safecrlfcore.autocrlfgitattributes 文档也说了同样的事情。

\n\n

为什么 git 不太可能支持这个

\n\n

lfcf是具有非常特定含义的控制字符。常规字符(例如句号).根据上下文具有多种含义。在许多语言中,它标志着句子的结束。但这在数字上意味着不同的东西。...常用于省略号,不是三句结尾。

\n\n

因此,支持此类选项的 git 会导致存储在 git 存储库中的许多文本文件变得混乱。

\n\n

解决方法:使用 git commit在文本文件中没有句点的每个句点之后hook自动插入。lf

\n\n

这将是一个非常简单的正则表达式来做到这一点。

\n\n

通过尝试这种方法,您将发现以下两件事之一:

\n\n
    \n
  • (a) 酷,这对我有用!我的文件仍然是普通的文本文件,我的存储库仍然是正常的,因此其他人可以使用它。

  • \n
  • (b) 哇,现在我知道他们为什么不支持这个了。多么混乱的#$*&#@CRLF!

  • \n
\n\n

为什么你真的不需要这个

\n\n

之所以有“文章建议人们将每个句子放在自己的行中”是因为git diff用于仅支持行粒度差异。行差异对于代码很有用,但对于散文却很糟糕。插入句子甚至编辑一个单词都会导致整个段落被标记为已更改,除非该段落被分成几行。

\n\n

但现在如果您使用,或选项,则git diff支持单词粒度--word-diff[=<mode>]--word-diff-regex=<regex>--color-words[=<regex>]

\n\n

输入git help diff或查看git-diff 文档 以获取更多信息。

\n