首页 > 解决方案 > Git过滤选项卡到空间转换但不显示文件已修改

问题描述

我遇到了一些麻烦,因为我喜欢我的代码由制表符缩进(是的,你们中的一些人不会喜欢它,但请继续阅读)。我已经接受最好将文件存储在按空格缩进的 git 上,因为有些人会将他们的选项卡设置设置为不同的大小,并且存储选项卡的文件会弄乱缩进。到目前为止,一切都很好。现在我的问题。

我阅读了 git 的过滤器功能并想,这将允许我存储按制表符缩进的文件,但将它们按空格缩进,这样就不会有人生气了。起初这是可行的,但后来我注意到,即使我没有更改文件本身,它也会报告为已修改(通过 git status),因为缩进字符已更改(当然)。这绝对不好。

有没有办法让文件以某种方式被过滤但 git status 不会仅仅因为过滤而将它们显示为已修改?(就像以某种方式仅在推送和获取时应用过滤器并让文件由本地仓库中的标签缩进)

必须按空格缩进很烦人,但是让 git status 将所有文件报告为已修改,即使它们不是很糟糕,所以我希望你们中的任何人都知道如何解决这个问题。

亲切的问候

编辑:进一步说明:我所做的是设置这两个设置:

git config --global filter.tabspace.clean 'expand --tabs=4'

git config --global filter.tabspace.smudge 'unexpand --tabs=4 -a'

之后我设置 git 使用这个过滤器(通过在 .gitattributes 文件中设置它)。

这导致每次提交时都应用 clean 函数,每次结帐时都应用 smudge 函数。这导致我将文件分隔在本地工作目录中,并在存储库中添加标签。这样做的缺点(我绝对不想要的效果)是 git status (等等git add -Aor git commit -a)认为重新缩进的文件已被修改并将所有文件添加到提交中,这是非常糟糕的。

Edit2:这个问题绝对不是关于重写 git 历史,而是关于让 git status 忽略仅由过滤器所做的更改,或者让过滤器在本地 repo 和远程 repo 之间工作,而不是在本地 repo 和工作树之间工作。

标签: git

解决方案


推荐阅读