Git签出带制表符,提交带空格

Git签出带制表符,提交带空格,git,vim,spaces,Git,Vim,Spaces,我有一个vim插件,它可以绘制类似于升华文本的缩进线,但它需要将空格表示为制表符。从思想上讲,更复杂的是,我认为存储库更适合使用空间 所以,现在,我正在使用vim将空格转换为tab-on-write,这在计算上很昂贵,并且已经开始减慢编辑速度 git是否可以在签出/拉入/合并时将空格转换为制表符,并在预提交时将制表符转换为空格 谢谢您可以使用.gittributes完成此操作,请参阅。您可以创建在提交和签出时转换文件的筛选器 在.gittributes中,配置受过滤器影响的文件 * filter

我有一个vim插件,它可以绘制类似于升华文本的缩进线,但它需要将空格表示为制表符。从思想上讲,更复杂的是,我认为存储库更适合使用空间

所以,现在,我正在使用vim将空格转换为tab-on-write,这在计算上很昂贵,并且已经开始减慢编辑速度

git是否可以在签出/拉入/合并时将空格转换为制表符,并在预提交时将制表符转换为空格


谢谢

您可以使用
.gittributes
完成此操作,请参阅。您可以创建在提交和签出时转换文件的筛选器

.gittributes
中,配置受过滤器影响的文件

* filter=spacetabs
在命令行上,告诉应该运行哪些脚本来过滤文件:

$ git config --global filter.spacetabs.clean tabs-to-spaces-script
$ git config --global filter.spacetabs.smudge spaces-to-tabs-script

另一种可能是。添加在提交和签出时运行的转换脚本。但是
.gittributes
可能更适合这种情况

您可以使用
.gittributes
执行此操作,请参阅。您可以创建在提交和签出时转换文件的筛选器

.gittributes
中,配置受过滤器影响的文件

* filter=spacetabs
在命令行上,告诉应该运行哪些脚本来过滤文件:

$ git config --global filter.spacetabs.clean tabs-to-spaces-script
$ git config --global filter.spacetabs.smudge spaces-to-tabs-script

另一种可能是。添加在提交和签出时运行的转换脚本。但是
.gittributes
可能更适合这种情况

工具就是工具,不要让它们支配你的工作流程。尤其是以赏心悦目的名义。此外,还支持制表符和空格。您的文件必须非常大,或者您的计算机速度非常慢,无法进行简单的全局替换“减慢编辑”(更确切地说,是打开和写入,不是吗?!)您真的认为Git/外部解决方案的速度会快很多吗?你真的把性能问题归结为替换问题了吗?(你怎么做?)Linux通常有两个专门用于此目的的实用程序-称为
expand
unexpand
。@romainl我并不特别喜欢vim缩进指南的实现,但分叉是一个有趣的想法。同样,你应该包括你的转换实现,因为a
:substitute
的行为与您描述的“我可以看着它工作”不同;i、 没有临时屏幕更新。工具是工具,不要让它们支配你的工作流程。尤其是以赏心悦目的名义。此外,还支持制表符和空格。您的文件必须非常大,或者您的计算机速度非常慢,无法进行简单的全局替换“减慢编辑”(更确切地说,是打开和写入,不是吗?!)您真的认为Git/外部解决方案的速度会快很多吗?你真的把性能问题归结为替换问题了吗?(你怎么做?)Linux通常有两个专门用于此目的的实用程序-称为
expand
unexpand
。@romainl我并不特别喜欢vim缩进指南的实现,但分叉是一个有趣的想法。同样,你应该包括你的转换实现,因为a
:substitute
的行为与您描述的“我可以看着它工作”不同;i、 e.没有临时屏幕更新..gitattributes是我的第一个想法,但是没有办法为提交定义一个筛选器,为拉取定义另一个筛选器,是吗?@seagoj one筛选器映射到两个不同的脚本选项卡到空格脚本和空格到选项卡脚本。@seagoj如果您要求筛选器在拉取而不是签出时运行,这真的没有必要。您只关心文件签出后的外观..gitattributes是我的第一个想法,但无法定义一个提交筛选器和另一个拉取筛选器,有吗?@seagoj one过滤器映射到两个不同的脚本选项卡到空格脚本和空格到选项卡脚本。@seagoj如果您要求过滤器在拉取而不是签出时运行,则实际上不需要这样做。您只关心文件签出后的外观。