【问题标题】:How should I configure git line endings for non Windows hosts with Windows VMs?我应该如何为具有 Windows 虚拟机的非 Windows 主机配置 git 行尾?
【发布时间】:2015-07-07 10:45:09
【问题描述】:

我们在 Windows 上开发并使用 git。在本地,行结尾是 CRLF,中间的所有魔法意味着我们的生产服务器 (CentOS) 上的文件将具有 LF。大家都很开心。

我们还使用仅限 Windows 的工具为我们生成大量文件(PHP Maker)。此应用生成带有 Windows 行结尾的文件。

还不错。

但是,我们有 2 名非 Windows 开发人员(一名在 Mac 上,一名在 Ubuntu Mate 上)。对于非 PHP Maker 生成的文件,他们的编辑器使用具有特定于操作系统的行结尾的文件,并且介于两者之间的所有魔法意味着这些文件在我们的生产服务器上以正确的行结尾结束。并且当 Windows 开发人员与非 PHP Maker 文件交互时,在本地使用 CRLF 行结尾仍然很好。

一切似乎都很好。

直到非 Windows 开发人员必须在他们的 Mac/Ubuntu 机器上的 Windows VM 中运行 PHP Maker 应用程序。

然后事情似乎有点不稳定。

最终结果是,当这些开发人员运行 PHP Maker 并从他们的开发机器(而不是虚拟机)提交时,行尾似乎变得……混乱……并且不知何故,当 Windows 开发人员掌握了这些文件时,它们是 100% 不同的空格 - 只是行尾。

我愿意做研究,但我知道的不够多,无法解决这个问题,因为我只在 Windows 上(一切都按预期工作)并且无法访问 Mac/Ubuntu 设置来诊断问题。

所以。我应该做些什么?我们以一种或另一种方式执行事情没有问题(如“无论好坏,这就是我们想要的设置方式”)。

但有些想法、建议、推荐、完美答案等都是值得赞赏的。

问候,

理查德·夸灵。

【问题讨论】:

    标签: windows macos git unix virtual-machine


    【解决方案1】:

    我们想出的解决方案是使用 .gitAttributes。

    这是我们的内容。

    # Auto detect text files and perform LF normalization
    *           text=auto
    
    # Force text mode
    *.css       text
    *.html      text diff=html
    *.inc       text
    *.ini       text
    *.js        text
    *.json      text
    *.lock      text
    *.md        text
    *.php       text diff=php
    admin/*.*   text eol=crlf
    *.pmp       text eol=crlf
    *.reg       text
    *.sql       text
    *.template  text
    *.txt       text
    *.xml       text
    *.yml       text
    .git*       text
    .htaccess   text
    PHPMaker/Extensions/*.xml text eol=crlf
    
    # Force binary mode
    *.eot       binary
    *.gif       binary
    *.ico       binary
    *.jpg       binary
    *.otf       binary
    *.pay       binary
    *.pdf       binary
    *.png       binary
    *.svg       binary
    *.ttf       binary
    *.woff      binary
    *.zip       binary
    

    admin 中的所有文件都是生成的,因此将它们全部设置为 windows 行结尾,以及其他一些基于 windows 的文件(生成器和一些扩展),一旦我们准备就绪,所有这些都可以正常工作。

    除了使用这个文件,我们还必须重建索引。

    为此,我们遵循了这个命令列表。

    git rm --cached -r .
    git reset --hard
    git add -A
    git commit -m "Normalize all the line endings"
    

    我们收到很多警告消息说“CRLF 将被 LF 取代”,但这是正常的和预期的。

    在当前无法从 master 或 development 重新定位的每个分支中执行此操作,我们就完成了。

    现在我们让 Windows、OSX 和 unix 开发人员(为 PHPMaker 构建器的非 Windows 开发人员使用 Windows VM)都可以和谐地工作。

    我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2013-10-21
      • 2015-12-30
      • 2011-02-09
      • 2017-08-12
      • 2014-01-14
      • 2011-09-22
      • 2013-11-21
      • 2017-05-27
      相关资源
      最近更新 更多