我正在尝试让 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 .