自定义git clean过滤器修改提交中的文件,但不修改工作目录

时间:2016-11-04 19:46:11

标签: git

我有一个自定义的.gitattributes条目:

*.csproj text filter=csprojsort

在.git / config:

中设置相应的过滤器
[filter "csprojsort"]
   clean = "path/to/repo/csprojsort.exe"

在提交带有更改的.csproj文件时,筛选器按预期执行,方法是按字母顺序对文件进行排序,然后继续提交更改。如果我执行git show path/to/file.csproj,则会显示更改。

但是,该文件在我的工作目录中不会更改,并且git无法识别当前状态不同步。只有当我签出另一个分支然后签出原始分支时才会在磁盘上更新文件。

任何线索是什么背后的?谢谢。

1 个答案:

答案 0 :(得分:1)

这听起来像过滤器按预期工作。该文档说 clean 过滤器是“......用于在签入时将工作树文件的内容转换为blob”,这正是您所看到的行为。它不会修改工作目录中的文件。

smudge 过滤器正好相反:当您签出文件时, smudge 过滤器会在数据写入文件之前运行。