Подтвердить что ты не робот

Git меняет права доступа к файлу при нажатии на сервер

Я использую git для управления веб-сайтом на сервере.

У меня есть локальное хранилище, которое показано ниже

[email protected]:myapp$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}'
total 16
755 [email protected] 18 thomas  staff   612 Jun 13 15:35 application
755 [email protected] 11 thomas  staff   374 Jun 12 16:25 assets
644 [email protected]  1 thomas  staff  6399 Jun 22 11:45 index.php
755 [email protected] 10 thomas  staff   340 May 14 15:22 system

У меня есть голый репозиторий на сервере, который использует post-receive, чтобы указать репо перед apache. Содержимое папок Apache public ниже - не голый репозиторий.

[email protected]:/srv/public/myapp# ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}'
total 20
700 drwx------ 15 root root 4096 Jun 27 11:31 application
700 drwx------ 10 root root 4096 Jun 27 11:31 assets
600 -rw-------  1 root root 6399 Jun 27 11:31 index.php
700 drwx------  8 root root 4096 Jun 27 11:31 system

Это вызывает хаос моего кода на веб-сервере.

Как я могу это исправить? Я использую гитолит, если это имеет значение.

git файл конфигурации сервера

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
4b9b3361

Ответ 1

Этот поток сообщений предлагает очень хорошее объяснение:

Это по дизайну. Хотя структура данных git может технически хранить бит unix в его деревьях, он был найден на ранней стадии в истории gitчто соблюдение чего-либо за пределами простого исполняемого бита закончилось тем, что более громоздкие для обычных случаев использования git (то есть люди, хранящие код или другие общие файлы в репозитории).

Мы могли бы добавить опцию конфигурации для просмотра файловых режимов, но она имеет как правило, считалось нецелесообразным. Он решает только часть общая проблема метаданных, так как она опускает имена владельцев и групп или идентификаторы, поскольку а также расширенные метаданные, такие как ACL.

Если для вас важны режимы, предлагаемые исправления являются следующими:

  • Используйте инструмент типа "метастор", который можно вызвать из git hooks, и  будет сохранять и восстанавливать разрешения файлов в файле, который отслеживается в  репозиторий. Обратите внимание, что при использовании такого инструмента есть расы  условие защиты файлов (т.е. git создаст ваш файл как  644, а затем метастор исправит его до 600; в это время,  кто-то может прочитать ваш файл).

  • В зависимости от того, что вы храните, может иметь смысл  ваш репозиторий в другом каталоге, защищенный разрешениями, и  затем используйте отдельный инструмент для развертывания ваших файлов из репозитория  к их окончательному местоположению (например, Makefile или другой установке  инструмент).