Почему работает такой механизм?
$ cat .gitignore:
DIR1/
$ git add DIR2/some_file
$ git commit -m "DIR2/some_file"
$ git push
$ git mv DIR2/some_file DIR1/
$ git commit -m "DIR2/some_file -> DIR1/some_file"
$ git push
$ git ls-files | grep some_file
DIR1/some_file
Так и задумано?