Вопрос по git, permissions, file-permissions – Git меняет права доступа к моему файлу, когда я нажимаю на сервер

20

Я использую 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. Апач & APOS; spublic содержимое папок ниже, а не пустой репозиторий.

[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
Вы проверили umask для пользователя, использовавшегося для создания / srv / public / myapp repo? Что в конфиге git? Что-нибудь, связанное с режимом файла, изменилось там? bcelary
Увидетьthis question. vergenzt
Я возился с файловым режимом, и он когда-то работал, теперь онtrue, Не уверен, что такое "демаскировка" является. У меня есть пользователь git, который я настроил с помощью gitolite. Я обновил пост. ThomasReggi

Ваш Ответ

1   ответ
21

Сообщение этой темы предлагает очень хорошее объяснение:

This is by design. While the git data structure can technically store unix mode bits in its trees, it was found early on in git's history that respecting anything beyond a simple executable bit ended up being more cumbersome for git's normal use cases (i.e., people storing code or other shared files in a repository).

We could add in a config option to respect file modes, but it has generally been seen as not worthwhile. It solves only a part of the general metadata problem, as it omits owner and group names or ids, as well as extended metadata like ACLs.

If modes are important to you, the suggested fixes are one of:

Use a tool like "metastore" that can be called from git hooks, and will save and restore file permissions in a file that is tracked in the repository. Do note that when using such a tool there is a race condition in protecting files (i.e., git will create your file as 644, and then metastore will correct it to 600; in the meantime, somebody could read your file).

Depending on exactly what you're storing, it may make sense to keep your repository in another directory, protected by permissions, and then use a separate tool to deploy your files from the repository to their ultimate location (e.g., a Makefile or other install tool).

@ThomasReggi вы можете установитьumask 022 в вашем скрипте .profile для применения 755 и 644 при создании новых файлов, например, при извлечении файлов из Git
Если это соответствует вашим потребностям, тогда да. Ключевым моментом является то, что Git не сделает это за вас. Если вам нужны конкретные разрешения, вам нужно будет сделать это вручную.
Как это в Интернете, и мне нужны постоянные разрешения. Могу ли я просто добавить строку в свой хук после получения, который изменяет все файлы и папки в рабочем каталоге (не в пустом хранилище) на правильные разрешения, папки755 и файлы644. ThomasReggi

Похожие вопросы