difference "mv" and "%{__mv}"

I’ve seen in some spec files, that all commands are macros like %__make, %__install, %__cp, %__mv and so on.

Do you know whats the difference? Or why to use these macros instead of commands?

They are usually always the same on most systems/distributions/OSes.

The macro version is safer to use if you are building a package on multiple systems, one of which might use a different command for ‘mv’, like ‘mv2’ (which doesn’t exist as far as I know, this is just an example.) In which case RPM has that already mapped for you, and you don’t have to keep track of every case in the SPEC file.