lae*_*tis 7 git line-endings eol gitattributes core.autocrlf
有没有办法core.autocrlf=input从内部强制执行.gitattributes以便在整个同事中传播策略?
在细节我要的是转换为lf上添加并保留as is在结帐.
问题在于既没有text也eol没有我想要的东西,.gitattributes因为它eol有3个可接受的值:
lfcrlfnative理想情况下,我希望我的.gitattributes文件看起来像这样:
* text eol=asis
bk2*_*204 11
目前尚不清楚工作树中“按原样”的确切含义。如果您希望 Git 将行结尾存储在存储库中的 LF 中,并让用户决定他们在工作树中想要什么(基于他们的平台和/或设置),请使用以下命令:
* text
Run Code Online (Sandbox Code Playgroud)
这将强制启用行结尾转换,Git 会将存储库中的文件转换为 LF,并在结帐时遵循用户的首选行结尾。如果并非所有文件都是文本(即,您有图像或其他二进制文件)并且您希望 Git 进行猜测,那么您可以使用以下命令:
* text=auto
Run Code Online (Sandbox Code Playgroud)
请注意,正如 LoopInFool 所提到的,这不会导致已经是 CRLF 的文件被转换,因此您需要确保您的文件在存储库中已经是 LF 格式,或者将这些文件类型明确列为文本(例如,*.c text)。
的行为core.autocrlf=input是在添加到存储库时强制转换为 LF,并且在签出时不执行任何转换;也就是说,无论用户的设置如何,始终使用 LF 结尾。如果这是您想要的行为,那么您可以通过以下操作来实现:
* eol=lf
Run Code Online (Sandbox Code Playgroud)
请注意,设置eol有效地设置了text属性,因此您不应在任何二进制文件上设置它。
如果您希望 Git 在签出时匹配工作树中已有的行结尾(例如,通过读取文件),那么它不会这样做。Git 总是根据配置进行行结束转换,而不考虑已有的内容,因此用户必须以某种方式表明他们的偏好或接受平台的默认行为。
此外,Git 始终将对文件大小的任何修改计为 中的修改git status,即使它忽略了 add 时的这些更改(例如,因为您只更改了行结尾);这同样是无法避免的。
如果您想要的是完全不同的东西,请更详细地了解您想要的行为,我将更新更多详细信息。
\n\n\n详细来说,我想要的是在提交时转换为 lf 并在结账时保持原样。
\n
Git 不会在提交时进行转换,而是在git add. (更准确地说,它对将对象复制到存储库中的操作进行转换并生成哈希值\xe2\x80\x94,但对于大多数目的来说,无论如何都是如此git add。)此时,它应用任何“干净”过滤器并执行输入端 EOL 操作。(同样,当从存储库复制到工作树时,会发生输出端“涂抹”过滤器和 EOL 操作,对于大多数用途来说,工作树是git checkout和git reset --hard。)
根据gitattributes 文档,设置eol=lf:
\n\n\n...强制 Git 在签入时将行结尾标准化为 LF,并在签出文件时阻止转换为 CRLF。
\n
因此,尽管我还没有实际测试过,但这听起来* eol=lf正是您想要的。 请注意,这与 不同core.eol,它的行为如您在问题中所描述的那样;这仅适用于.gitattributes适用于与名称模式匹配的文件的设置。