Bor*_*ard 28 git gitattributes
我们在.gitattributes文件中有这个:
* text=auto eol=lf
Run Code Online (Sandbox Code Playgroud)
我想准确理解这是做什么的.
第一部分是text=auto.从文档:
这确保了Git认为是文本的所有文件都将在存储库中具有规范化(LF)行结尾.
重要的是,Git仅针对它检测为文本文件的文件进行规范化.
但是,我不确定这个eol=lf部分.我认为它也将仅对文本文件进行规范化,但我在文档中找不到对它的支持,并且当我们的PNG文件也被标准化时我们有一个实例,使它们无效.
是否有像上面这样的设置基本上会说"在文本文件的两个方向上进行规范化,并单独保留二进制文件"?
Bor*_*ard 14
答案是否定的,Git目前(截至2.3)无法通过自动检测二进制和文本格式来执行结帐EOL转换,因此它只处理文本.解决方法是eol=lf仅指定所选文件类型(例如*.txt),或者相反,使用例如将某些文件类型标记为二进制*.png binary.
* text=auto这将正确标准化repo中的文本文件.但是,今天无法轻松实现第二部分(LF强制结账),因为添加
eol=lf将不幸地处理二进制文件.今天唯一的解决方案是标记某些类型以进行转换(例如*.txt eol=lf),或者相反地将某些类型标记为二进制(例如*.png binary).这两者都存在同样的问题:必须在
.gitattributes文件中明确列出特定的文件类型,这意味着必须提前知道类型,或者.gitattributes每次出现新文件类型时所有开发人员都必须记住更新文件该项目.他们不会.
小智 7
这个答案是为其他可能像我一样在这里绊倒的人提供的。
从 Git 2.10 开始,这按预期工作,以下内容仅与 2.10 相关(使用 检查版本git --version)。
Git 2.10 发行说明中的相关片段
* text=auto eol=lf表现为git config core.autocrlf false
* text=auto eol=crlf表现为git config core.autocrlf true
这可确保 Git 认为是文本的所有文件在存储库中都具有标准化 (LF) 行结尾。
此引用中提到的这一点lf是指将文件添加到索引(并最终推送到上游)时发生的情况。附加eol=xx说明了这些文件应该在您的工作树中是什么,即在签出 git 通过该部分自动检测为文本的文件后,它们应该如何在您的文件系统本地显示* text=auto。
是否有像上面这样的设置基本上会说“对文本文件进行两个方向的标准化,并保留二进制文件”?
两者都可以,但我个人在.gitattributes文件中使用以下内容。顺序确实很重要。
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
*.ahk text eol=crlf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7401 次 |
| 最近记录: |