Ответ 1
Этот поток сообщений предлагает очень хорошее объяснение:
Это по дизайну. Хотя структура данных git может технически хранить бит unix в его деревьях, он был найден на ранней стадии в истории gitчто соблюдение чего-либо за пределами простого исполняемого бита закончилось тем, что более громоздкие для обычных случаев использования git (то есть люди, хранящие код или другие общие файлы в репозитории).
Мы могли бы добавить опцию конфигурации для просмотра файловых режимов, но она имеет как правило, считалось нецелесообразным. Он решает только часть общая проблема метаданных, так как она опускает имена владельцев и групп или идентификаторы, поскольку а также расширенные метаданные, такие как ACL.
Если для вас важны режимы, предлагаемые исправления являются следующими:
Используйте инструмент типа "метастор", который можно вызвать из git hooks, и будет сохранять и восстанавливать разрешения файлов в файле, который отслеживается в репозиторий. Обратите внимание, что при использовании такого инструмента есть расы условие защиты файлов (т.е. git создаст ваш файл как 644, а затем метастор исправит его до 600; в это время, кто-то может прочитать ваш файл).
В зависимости от того, что вы храните, может иметь смысл ваш репозиторий в другом каталоге, защищенный разрешениями, и затем используйте отдельный инструмент для развертывания ваших файлов из репозитория к их окончательному местоположению (например, Makefile или другой установке инструмент).