我如何通过父项目中的.gitattributes在子模块中强制行结束为LF



我有一个存储所有Vim设置的存储库。它使用子模块来拉入病原体的插件(我看过其他插件管理器,到目前为止不感兴趣)。

由于MSYSGit在打开Vim以提交消息时处理行结尾的方式,我需要使用Unix行结尾(eol=lf)来存储存储库。

我尝试在主repo中添加一个.gitattributes文件,内容为:

* eol=lf
* text=auto

使用git rm --cached -r .git reset --hard刷新主存储库后,主存储库中的行结束符现在是LF。但是,在子模块中运行相同的命令不起作用。

如何配置我的git仓库,以便子模块以LF行结尾签出?

我无法重现您的场景,但我建议您尝试git config --global core.autocrlf input

使用上面的指令,您可以强制系统处理unix格式的任何回车。

您的.gitattributes文件仅根据文档影响当前工作树:

…Git查询$GIT_DIR/info/attributes文件(具有最高优先级),.gitattributes文件在与问题路径相同的目录下,以及它的父目录直到工作树的顶层")。

"工作树"表示存储库的目录。如果你在子模块中,它的工作树不包括父存储库,所以你的文件将被忽略。

解决方案可能是将.gitattributes文件添加到每个子repo -如果您使用全局文件或配置,它将特定于您(作为用户)而不是您的代码。

您可以使用这些设置设置一个repo模板

git config --global init.templatedir ~/.config/git/init.template
mkdir -p $_/info
printf %s\n '* eol=lf' '* text=auto' >$_/attributes

那么所有新的克隆,包括git submodule为您做的,将具有这些默认属性。

您可以在稍微命名错误的/usr/share/git-core/templates处看到工厂默认模板。

我想如果你想,你可以设置init.templatedir在你的vim的repo,我还没有检查,但似乎我应该工作,应该为git submodule做一个本地模板。

相关内容

  • 没有找到相关文章

最新更新