我尝试使用以crlf结尾的行提交文件,但失败了。
我花了一整天的时间在我的Windows电脑上尝试不同的策略,几乎要停止尝试使用Git,而是尝试使用Mercurial。
如何正确处理CRLF行结束符?
我尝试使用以crlf结尾的行提交文件,但失败了。
我花了一整天的时间在我的Windows电脑上尝试不同的策略,几乎要停止尝试使用Git,而是尝试使用Mercurial。
如何正确处理CRLF行结束符?
当前回答
这是Windows和Visual Studio用户与Mac或Linux用户共享代码的两个选项。要了解更详细的解释,请阅读gitattributes手册。
* text = auto
在你的repo .gitattributes文件中添加:
* text=auto
这将正常化所有的文件与LF行结束在回购。
取决于您的操作系统(核心。eol设置),工作树中的文件将被标准化为基于Unix系统的LF或基于Windows系统的CRLF。
这是Microsoft . net回购所使用的配置。
例子:
Hello\r\nWorld
将在回购中始终归一化为:
Hello\nWorld
签出时,Windows中的工作树将被转换为:
Hello\r\nWorld
签出时,Mac中的工作树将保留为:
Hello\nWorld
注意:如果您的repo已经包含了未规范化的文件,那么当您下次对这些文件进行任何更改时,git状态将显示这些文件已完全修改,这可能会让其他用户稍后合并他们的更改。有关详细信息,请参见更改行结束符后刷新存储库。
核心。独裁者= true
如果文本在. Git attributes文件中未指定,Git使用核心。selflf配置变量,以确定是否应该转换文件。
对于Windows用户,git配置——global core。专制是一个很好的选择,因为:
文件只有在添加到repo时才被归一化为LF行结束符。如果在repo中有未规范化的文件,此设置将不会触及它们。 所有文本文件都转换为工作目录中的CRLF行结束符。
这种方法的问题在于:
If you are a Windows user with autocrlf = input, you will see a bunch of files with LF line endings. Not a hazard for the rest of the team, because your commits will still be normalized with LF line endings. If you are a Windows user with core.autocrlf = false, you will see a bunch of files with LF line endings and you may introduce files with CRLF line endings into the repo. Most Mac users use autocrlf = input and may get files with CRLF file endings, probably from Windows users with core.autocrlf = false.
其他回答
使用核心。当我在Visual Studio 2010项目中检出文件时,selflf =false会阻止所有文件被标记为更新。开发团队的另外两名成员也使用Windows系统,因此混合环境没有发挥作用,但存储库附带的默认设置总是将所有文件标记为克隆后立即更新。
我认为最重要的是找到适合您的环境的CRLF设置。特别是在我们的Linux盒子上的许多其他存储库中,设置selff = true会产生更好的结果。
20多年后,我们仍然在处理操作系统之间的行尾差异……伤心。
这是Windows和Visual Studio用户与Mac或Linux用户共享代码的两个选项。要了解更详细的解释,请阅读gitattributes手册。
* text = auto
在你的repo .gitattributes文件中添加:
* text=auto
这将正常化所有的文件与LF行结束在回购。
取决于您的操作系统(核心。eol设置),工作树中的文件将被标准化为基于Unix系统的LF或基于Windows系统的CRLF。
这是Microsoft . net回购所使用的配置。
例子:
Hello\r\nWorld
将在回购中始终归一化为:
Hello\nWorld
签出时,Windows中的工作树将被转换为:
Hello\r\nWorld
签出时,Mac中的工作树将保留为:
Hello\nWorld
注意:如果您的repo已经包含了未规范化的文件,那么当您下次对这些文件进行任何更改时,git状态将显示这些文件已完全修改,这可能会让其他用户稍后合并他们的更改。有关详细信息,请参见更改行结束符后刷新存储库。
核心。独裁者= true
如果文本在. Git attributes文件中未指定,Git使用核心。selflf配置变量,以确定是否应该转换文件。
对于Windows用户,git配置——global core。专制是一个很好的选择,因为:
文件只有在添加到repo时才被归一化为LF行结束符。如果在repo中有未规范化的文件,此设置将不会触及它们。 所有文本文件都转换为工作目录中的CRLF行结束符。
这种方法的问题在于:
If you are a Windows user with autocrlf = input, you will see a bunch of files with LF line endings. Not a hazard for the rest of the team, because your commits will still be normalized with LF line endings. If you are a Windows user with core.autocrlf = false, you will see a bunch of files with LF line endings and you may introduce files with CRLF line endings into the repo. Most Mac users use autocrlf = input and may get files with CRLF file endings, probably from Windows users with core.autocrlf = false.
试着设定核心。自专制配置选项为true。还要看看核心。safecrlf选项。
实际上它听起来像核心。Safecrlf可能已经在你的存储库中设置了,因为(强调我的):
如果这不是当前设置的核心的情况。专制者,git将拒绝文件。
如果是这种情况,那么您可能需要检查您的文本编辑器是否配置为一致地使用行结束符。如果文本文件混合包含LF和CRLF行结束符,您可能会遇到问题。
最后,我觉得在Windows上简单地“使用您所给予的”和使用LF终止行的建议会导致比它解决的问题更多的问题。Git有上述选项来尝试以合理的方式处理行结束符,因此使用它们是有意义的。
在混合环境(微软+ Linux + Mac)中获得一致的行结束符的两种替代策略:
A.全局所有存储库设置
将所有转换为一种格式 找到。-type f -not -path "./。Git /*" -exec dos2unix {} \; Git commit -m 'dos2unix转换' 设置的核心。在Linux/UNIX上为输入,在MS Windows上为true(存储库或全局) Git配置——全局核心。autocrlf输入 可选地,设置核心。将Safecrlf设置为true(停止)或warn(歌唱:),以添加额外的保护,比较反向换行转换是否会产生相同的文件 Git配置——全局核心。safecrlf真实
B.或根据存储库设置
将所有转换为一种格式 找到。-type f -not -path "./。Git /*" -exec dos2unix {} \; Git commit -m 'dos2unix转换' 向存储库添加一个.gitattributes文件 Echo "* text=auto" > .gitattributes Git添加.gitattributes Git提交-m '为统一的行结束添加。Git属性'
不要担心二进制文件——git应该对它们足够聪明。
更多关于safecrlf/ selflf变量的信息
不要转换行结束符。VCS的工作不是解释数据——只是存储和版本它。每个现代文本编辑器都可以读取这两种行尾。