我有一个存储所有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
做一个本地模板。