如何为使用Windows VM的非Windows主机配置git line endings?

时间:2015-04-28 14:06:27

标签: windows macos git unix virtual-machine

我们在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并从他们的开发机器(而不是VM)提交时,行结尾似乎变得......混淆......并且当Windows开发人员掌握这些文件时,它们是100%的空白区域 - 它只是JUST线的结尾。

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

因此。我应该做些什么?我们没有任何问题以某种方式强制执行(如在"对于好或坏,这就是我们想要设置事物的方式")。

但是一些想法,建议,建议,完美答案等都受到赞赏。

此致

Richard Quadling。

1 个答案:

答案 0 :(得分: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

管理员中的所有文件都是生成的,因此将它们全部添加到Windows行结尾,以及其他一些基于Windows的文件(生成器和一些扩展名),一旦我们完成了所有工作,这些文件就完成了。

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

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

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

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

在每个分支机构中,这个目前是否无法重新掌握或开发,我们已经完成了。

现在我们拥有Windows,OSX和unix开发人员(使用适用于PHPMaker构建器的非Windows开发人员的Windows VM),所有人都能和谐地工作。

我希望这有助于某人。