Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Catch-22带有.gitattributes设置和repo的初始克隆_Git_Line Endings_Git Config_Gitattributes - Fatal编程技术网

Catch-22带有.gitattributes设置和repo的初始克隆

Catch-22带有.gitattributes设置和repo的初始克隆,git,line-endings,git-config,gitattributes,Git,Line Endings,Git Config,Gitattributes,由于我正在使用的第三方库存在一些问题,我需要永远不要为我的Git存储库自动转换行尾。我推或拉的任何代码都必须在我的工作区和遥控器上存储相同的行尾(即和应始终保持不变) 以下Git配置允许这样做: core.autocrlf false 为了减少开发人员之间的环境依赖性,我决定使用.gittributes文件来配置它,如中所述 我遇到的问题是在一台新机器上初始克隆回购协议。因为行结束配置选项现在位于repo本身中,所以初始克隆使用本地环境的全局行结束配置。因此,如果特定用户的全局配置如下所示:

由于我正在使用的第三方库存在一些问题,我需要永远不要为我的Git存储库自动转换行尾。我推或拉的任何代码都必须在我的工作区和遥控器上存储相同的行尾(即
应始终保持不变)

以下Git配置允许这样做:

core.autocrlf false
为了减少开发人员之间的环境依赖性,我决定使用
.gittributes
文件来配置它,如中所述

我遇到的问题是在一台新机器上初始克隆回购协议。因为行结束配置选项现在位于repo本身中,所以初始克隆使用本地环境的全局行结束配置。因此,如果特定用户的全局配置如下所示:

core.autocrlf true
这意味着具有以下Unix样式行结尾的文件:

This file has<LF>
Unix style line endings.<LF>
但是,这完全违背了使用
.gittributes
的目的


有什么好办法吗?

一个可能的缓解措施是在repo中版本一个脚本,该脚本应该在克隆repo后由开发人员运行(如同一repo的
自述文件中所述)

该脚本将:

  • 执行一个
    git配置--global core.autocrlf false
  • 重置索引,触发下线正常化

您可以将其与服务器端的预接收挂钩相结合(假设您正在推送到一个私有存储库托管服务器),该挂钩将拒绝任何带有错误eol的推送。

是否会(以CRLF结尾)?不应该这样做:应该应用最初提取的提交中的
.gittributes
。@torek-是的。我只是通过提交一个带有Unix风格行结尾的文件,用一些小型repo测试了这一点。当我用
core.autocrlf true
将此repo克隆到一台Windows计算机时,它以Windows样式的行尾结束。有趣。这意味着无论你有什么版本的Git都有一个bug;convert.c源代码中到处都有代码来控制它,带有注释,这意味着它应该以另一种方式工作。这段代码非常曲折。@torek-我使用的是“2.15.0.windows.1”版本。由于最近公布的安全漏洞,我计划升级到新版本,但尚未升级。它应该是
*-text
,这实际上会取消属性设置,而不是
*text=false
,它只是将其设置为(无意义的)字符串“false”。详情请参阅。
This file has<LF>
Unix style line endings.<LF>
This file has<CR><LF>
Unix style line endings.<CR><LF>
core.autocrlf false