让 git smudge 过滤器在 Ubuntu 中工作

让 git smudge 过滤器在 Ubuntu 中工作

我正在尝试让 git smudge 过滤器在 ubuntu 中工作,如下 stackoverflow 答案中所述:https://stackoverflow.com/questions/2316677/can-git-automatically-switch-between-spaces-and-tabs

目标是在结帐时将空格转换为制表符。

在我的 .gitconfig 中我有以下条目:

[filter "tabspace"]
    smudge = unexpand --tabs=4 --first-only
    clean = expand --tabs=4 --initial

例如,考虑使用空格缩进的 lxqt-panel 存储库:https://github.com/lxde/lxqt-panel

在中lxqt-panel/.git/info/attributes,我启用了 tabspace 过滤器:

*.cpp   filter=tabspace
*.h     filter=tabspace

根据 Stackoverflow Answer 的各种在线来源,运行git checkout HEAD -- **现在应该会将所有空格转换为制表符。但是,就我而言,git 似乎完全忽略了这些设置;手动运行unexpand可以正常工作。

我在这里遗漏了什么?

我在 Ubuntu 16.04 上使用 git 2.11.0。

答案1

git checkout HEAD -- **只会转换有更改的文件。未更改的文件不会被触及,这就是为什么其中没有任何内容被替换的原因。要强制更新所有文件,您可以删除它们然后重置。但请确保您没有任何未提交的更改,因为它们将丢失。例如,您可以这样做:

git rm -r .
git reset --hard

或者,如果您愿意,您可以仅用以下内容替换所有.h.cpp文件:

rm **/*.{h,cpp}
git checkout .

相关内容