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

标签 git text plaintext

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

我之所以这样问,是因为这样可以更轻松地使用 git 来管理文档和 markdown 文件等文本文件。我看过一些文章建议人们将每个句子放在自己的行中,以便 git 将其视为一个单元(而不是较长段落的一部分),这很尴尬。因此这里的问题。

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

最佳答案

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

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

git config 中所述文档,core.eol 的有效值是lfcrlf :

Sets the line ending type to use in the working directory for files that are marked as text (either by having the text attribute set, or by having text=auto and Git auto-detecting the contents as text). Alternatives are lf, crlf and native, which uses the platform’s native line ending. The default value is native. See gitattributes[5] for more information on end-of-line conversion. Note that this value is ignored if core.autocrlf is set to true or input.

其他相关的 git 配置设置是 core.safecrlfcore.autocrlf . gitattributes documentation也是这么说的。

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

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

所以 git 支持这样的选项会导致存储在 git repo 中的许多文本文件变得困惑。

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

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

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

  • (a) 太棒了,它对我有用!我的文件仍然是普通的文本文件,我的 repo 仍然是正常的,所以其他人可以使用它。

  • (b) 哇,现在我知道他们为什么不支持这个了。多么#$*#@CRLF 一团糟!

为什么你真的不需要这个

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

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

输入 git help diff或查看 git-diff Documentation了解更多信息。

关于git - 可以将 git 换行符更改为句点(以获得更好的基于句子的差异)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61993781/

相关文章:

git - 通用 git 重置为默认上游 HEAD

jquery - 当出现某些文本时隐藏 <h2> 的内容 - JQuery

git - 公共(public)文件中的 Bash 和 Git Flow 错误

java - 在从独立相机捕获的图像上绘制文本(时间戳)

javascript - 与 requirejs 连接并排除单个文件?

perl - XSLT 1 纯文本间距

ruby-on-rails - 如何为 ActionMailer 的纯文本/文本 Haml 模板配置 UTF-8?

r - 从 RStudio 控制台复制文本为 "plain text"

git Push 崩溃并显示 "inflate returned -551"

git - 为什么 git 中的双点与三点对于 diff 和 log 的行为不同