【问题标题】:How do I tell my git tools to NOT transform line endings?如何告诉我的 git 工具不要转换行尾?
【发布时间】:2020-05-12 12:43:57
【问题描述】:

我在多个平台和容器中使用 git,并且在 Windows 和 Linux 容器之间挂载文件系统。我使用的所有开发工具都可以安静而明智地处理源代码的任何行结尾。 git除外。

我发现 git - 命令行和桌面应用程序 - 将在 Windows 和 Linux 格式之间转换行尾(CRLF 和 LF)。我不希望它那样做。我只想让 git 处理提供的文件,而不是试图通过转换它们来猜测它们将如何被使用。转换后的行尾正在造成严重破坏。我创建带有 LF 行结尾的文件,这就是我希望它们始终保持在任何地方的方式。

如何告诉 git 工具不要管行尾?我能够找到的所有文档都描述了如何为特定存储库中不同类型的文件的不同类型的转换设置各种规则。这是我的工具 的功能,而不是存储库。如何为 tools 设置它以使我的文件格式保持不变?

【问题讨论】:

    标签: git github newline


    【解决方案1】:

    最简单的方法是将其添加到.gitattributes:

    *    -text
    

    应该可以。那就是告诉git:I will take care of line endings.

    cmets 中有重要信息(不一定来自我),因此请务必阅读。

    【讨论】:

    • 所以存储库的选项说“不要规范化任何正在检入的文件”。大概所有在 Windows 下签出此 repo 的开发人员都需要丢弃他们的工作文件并再次克隆,否则他们最终可能会提交他们已经签出的 Windows 行尾。我必须在 linux 环境下的 repo 克隆中进行此更改,以确保文件以 Linux 行结尾“冻结”?我无法为我的 tools 设置这个,即 my 机器上的 my 版本的 git 吗?还是这总是存储库的属性?
    • @Jason 您可以在.gitattributes 中写入的内容,您可以改为写入.git/info/attributes,它只会影响存储库的克隆。
    • 正如@j6t salid,.git/info/attributes 也可以正常工作,并且不会被推/拉。
    • @Jason:使用-n 进行初始克隆(更长的--no-checkout 的缩写,您也可以使用它)。然后根据需要编辑.git/info/attributes 文件,然后运行git checkout。如果您忘记了,只需删除整个工作树并运行 git checkout HEAD -- .git reset --hard HEAD,例如。
    • 请注意,有个人和系统范围的.gitattributes 文件。您的个人地址在$XDG_CONFIG_HOME/git/attributes$HOME/.config/git/attributes。系统一位于$(prefix)/etc/gitattributes 中,其中$(prefix) 是Git 编译时选项。但是,系统和用户文件的优先级低于任何已提交的.gitattributes,因此如果有人提交了.gitattributes,它将覆盖您自己的用户文件。 .git/info/attributes 文件是最高优先级,幸运的是。
    猜你喜欢
    • 2013-12-28
    • 2010-12-19
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多