Пожалуйста, посмотрите, как git объекты хранятся для коммитов. Вы можете видеть, что каждый коммит ha sh указывает на объект дерева, который в свою очередь указывает на ha sh блобов (файлов) и других деревьев (папок). Вы могли видеть, что имя и формат файлов хранятся в деревьях, сам по себе файловый блоб не имеет никакого имени, он просто имеет большой контент.
Источник: Google
Отвечая на второй вопрос, git не думает о кодировке символов, он просто конвертирует содержимое в двоичный формат. Операционная файловая система будет обрабатывать кодировку, когда файлы обновляются в рабочей области.
Надеюсь, это было достаточно ясно. Спасибо