我最近阅读了一些关于 .gitattributes 的文章,还发现了像这样的地方,https://github.com/alexkaratarakis/gitattributes,他们试图在其中维护所有文件类型的 gitattributes。但在我心里,翻看那些文件,我本能地认为这是一个难以维护的烂摊子。这意味着每当您使用任何新的文件扩展名或任何软件产生新的文件扩展名时,您都必须更新该文件,这是不可能的。当你与一个超过 30 人的团队一起工作时,维护这样的文件简直就是一场噩梦,我们几乎无法维护一个简单的 icon.svg 文件。
但除此之外,我多年来一直在许多不同的项目中编码和使用 git,但我从未使用过 .gitattributes。我们在项目中使用 prettier 之类的东西,将换行符重写为“lf”,并且我们在 Windows 上有开发人员,这样的东西永远不会出现任何问题,vscode 也永远不会出现任何此类问题。Git 还会自动选取 png 等二进制文件,并自动显示 svg 等文件的文本差异,我从来不需要配置它。
所以我想问一下,这个文件真的有必要吗?因为在我看来,它正在签署大量完全没有必要的维护,而且 git 足够聪明,可以弄清楚它应该或不应该对文件做什么。
我设置了一个干净的过滤器来应用自动套用格式和 uncrustify。相应的污迹过滤器不执行任何操作,它只是调用cat.
[filter "autoformat"]
clean = uncrustify -c ~/tmp/autoformat/uncrustify.cfg --replace
smudge = cat
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我签出 eg 时master,git 说我的工作树与提交不同,而显示的差异是 clean 过滤器的作用。
看来 clean 过滤器是在 diff 之前应用的。那是对的吗?是否可以禁用此功能?这是个好主意吗?
我想要一个将自动格式应用于暂存区域的解决方案,即仅暂存的块。清洁过滤器不是一个合适的解决方案吗?
在我的 uncrustify 配置中,主提交不符合我的编码标准,checkout -f HEAD^然后checkout master -f显示了差异。这既令人困惑又麻烦(git 拒绝签出其他内容,以防止丢失更改)。