能否将git使用的换行符改成默认的以外的东西?\n
(例如:一个时期 .
或句号加空格)?)
我之所以这么问,是因为这样可以让git更容易管理文本文件,比如文档和markdown文件。我看过一些文章,建议人们把每句话都放在自己的行里,这样git就会把它当作一个单元(而不是一个较长段落的一部分),这很不方便。因此,这里就有了问题。
我在网上搜索了一下,没有结果。
我加了你的问题,因为我喜欢这个想法。不幸的是,答案是 不,Git 不支持这个功能。
正如在 git配置 的有效值。core.eol
是 lf
和 crlf
:
设置工作目录中标记为文本的文件的行结尾类型(通过设置文本属性,或通过 text=auto,Git 自动检测内容为文本)。备选的类型有 lf、crlf 和 native,后者使用平台的本地行结束符。默认值是 native。更多关于行尾转换的信息,请参见 gitattributes[5] 。请注意,如果core.autocrlf被设置为true或input,这个值会被忽略。
其他相关的 git 配置设置有 core.safecrlf
和 core.autocrlf
. gitattributes文档 也是这么说的。
lf
和 cf
是具有非常特殊意义的控制字符。常规字符,如句号 .
根据上下文的不同,有多种含义。在许多语言中,它标志着一个句子的结束。但在数字中,它的意思就不同了。...
常常被用来做省略号,这不是三句话的结尾。
所以git支持这样的选项,会导致许多存储在git repo中的文本文件一团糟。
hook
自动插入 lf
在你的文本文件中的每一个没有句号的句号后面。这将是一个非常简单的正则表达式。
通过尝试这种方法,你会发现两种情况之一。
(a) 酷,这对我有效!而且我的文件还是正常的文本文件,我的repo还是正常的,所以其他人可以使用它。
(b) 哇,现在我知道为什么他们不支持这个了。真是#$*&#@CRLF乱七八糟的东西!
之所以有 "建议大家把每一句话都放在自己的行里的文章",是因为 git diff
只支持 粒度 diffs。行差异对代码来说很好用,但对散文来说却很糟糕。插入一个句子,甚至编辑一个单词,都会导致整个段落被标记为已更改,除非该段落被分成几行。
但是 git diff
现在支持 词性 如果你使用 --word-diff[=<mode>]
, --word-diff-regex=<regex>
或 --color-words[=<regex>]
选项。
类型 git help diff
或见 git-diff 文档 更多信息。