W dniu 10.09.2016 o 01:07, john smith pisze: > On 9/10/16, Junio C Hamano <gitster@xxxxxxxxx> wrote: >> The clean and smudge operations should look _only_ at the contents >> they are filtering, and nothing else, and the clean/smudge filtering >> mechanism is designed to support that use case. It is not designed >> to do things like embedding the name of the branch that is being >> checked out into the result. > > Ok, I think I get it. It was actually my original problem with smudge > filters because I wanted them to be run after *every* checkout even if > file contents stayed the same (hence the subject). And that's not the case, for performance reasons. > > Now Jakub suggested post-checkout hook in conjunction with only clean > filter for my problem of managing dotfiles but I think I don't fully > get it. The problem is that in the scenario presented in my last > e-mail clean filter is run in the situation which doesn't like a > checkin to me. Is `git checkout <PATH>' doing a *checkin*" under the > hood so that the clean filter is called? What does actually `checkin' > mean in Git? I thought that checkin it's the same as committing a > file into the repository. I was wrong, I'm sorry. My mistake. You would need post-checkout hook together with clean / smudge filters (though you could get by without smudge filter, at least in theory...). The `post-checkout` hook could run e.g. "git checkout -- '*.conf'" to force use of smudge filter, after checking that it was a change of branch ("git checkout <commit-ish>"). See githooks(5) for details (last, third parameter passed to hook script is 1, rather than 0). Unfortunately I don't see a way to query .gitattributes files to find out all patterns that match specific attribute; you would need to duplicate configuration: .gitattributes: *.conf filter=transform .git/config [filter "transform"] clean = replace-with-placeholder %f smudge = expand-with-branchname %f .git/hooks/post-checkout #!/bin/sh test "$3" -eq "1" && git checkout -- '*.conf' Or something like that. -- Jakub Narębski