代码之家  ›  专栏  ›  技术社区  ›  tinlyx

将git换行符更改为句点?

git
  •  0
  • tinlyx  · 技术社区  · 6 年前

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

    我之所以提出这个问题,是因为这将使使用git管理文档和markdown文件等文本文件变得更加容易。我见过一些文章建议人们把每个句子放在自己的行中,这样它就可以被git视为一个单元(而不是一个较长段落的一部分),这很尴尬。因此,这里的问题。

    我做了一些网上搜索,但无济于事。

    0 回复  |  直到 6 年前
        1
  •  4
  •   Inigo    6 年前

    有趣的想法!但对不起,没有。

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

    如所述 git config 文档,有效值 core.eol lf crlf :

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

    其他相关的git配置设置包括 core.safecrlf core.autocrlf . gitattributes documentation 也说了同样的话。

    为什么git不太可能支持这一点

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

    因此,git支持这样的选项会导致存储在git仓库中的许多文本文件一团糟。

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

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

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

    • (a) 酷,它对我有效!我的文件仍然是普通的文本文件,我的仓库仍然正常,所以其他人可以使用它。

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

    为什么你真的不需要这个

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

    但是 差异比较 现在支持 单词粒度 如果你使用 --word-diff[=<mode>] , --word-diff-regex=<regex> --color-words[=<regex>] 选项。

    类型 git help diff 或查看 git-diff Documentation 了解更多信息。