代码之家  ›  专栏  ›  技术社区  ›  LeopardSkinPillBoxHat

第22条军规。gitattributes设置和repo的初始克隆

  •  1
  • LeopardSkinPillBoxHat  · 技术社区  · 6 年前

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

    以下Git配置允许这样做:

    core.autocrlf false
    

    为了减少开发人员之间的环境依赖性,我决定使用 .gitattributes 文件进行配置,如中所述 this answer

    * text=false
    

    我遇到的问题是在新机器上对回购进行初始克隆。由于测线结束配置选项现在位于repo本身中,因此初始克隆使用本地环境的全局测线结束配置。因此,如果特定用户的全局配置是这样的:

    core.autocrlf true
    

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

    This file has<LF>
    Unix style line endings.<LF>
    

    将在工作区中结束,如下所示:

    This file has<CR><LF>
    Unix style line endings.<CR><LF>
    

    这似乎是第二十二条军规,因为它不能适用 .gitattributes 设置,直到克隆回购。到了那个阶段就太晚了。

    显而易见的解决方案是确保所有用户都具有以下全局配置值:

    果心autocrlf错误
    

    但是,这违背了使用 .gitattributes 完全

    有什么好办法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   VonC    6 年前

    一种可能的缓解措施是在repo中版本一个脚本,该脚本应由开发人员在克隆repo后运行(如 README 同一回购协议)

    该脚本将:

    • 执行 git config --global core.autocrlf false
    • 重置索引,触发eol规范化 as I detailed here .

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