Предотвратить Git изменение прав доступа

Когда я вытаскиваю изменения из своих репозиториев, Git изменяем права доступа к файлу (фактически, он меняет разрешение группы write).

Если я прав, Git должен отслеживать только исполняемый бит, и это в любом случае можно удалить, установив core.filemode в false.

Но, хотя для файла файла установлено значение false (в локальном, глобальном и пользовательском), когда я тяну, разрешение write постоянно изменяется.

Я мог бы использовать git -hooks для reset правильного chmod, но это некоторые накладные расходы, и я бы предпочел, если бы просто попросить Git полностью игнорировать изменение режима файла.

Кто-нибудь знает, как достичь этого?

Ответ 1

Один параметр конфигурации, который может помочь здесь, - core.sharedRepository, представленный в сообщении блога " Сохранение группы Запись на Git Объектах в совместном репозитории:

Решение оказалось довольно простым.
В файле .git/config я добавил строку, которая гласит: "sharedRepository = group", например:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sharedRepository = group

Затем были созданы новые файлы в .git/objects с соответствующими разрешениями для групповой записи.
(Тем не менее, обратите внимание, что новые файлы принадлежат группе из основной группы учетной записи пользователя, через которую был получен push-запрос. Если пользователи, сотрудничающие с проектом, имеют разные первичные группы, и если эти пользователи не разделяют членство в этом наборе групп, вы все равно можете столкнуться с проблемами.)

Убедитесь, что значение вашего umask:

Пример: 0660 сделает репо для чтения и записи для владельца и группы, но недоступен для других (эквивалентно группе, если только umask равно, например, 0022).

Ответ 2

Я использую это выполнить команду как пользователь, у которой есть разрешения, которые вы хотите сохранить:

sudo -u user command

В этом случае это может быть:

sudo -u www-data git pull

www-data является пользователем apache по умолчанию по Ubuntu как минимум.

Это позволяет изменять разрешения. Я использую его при обновлении репозиториев git на моем VPS, сохраняя при этом права доступа к файлам для пользователя веб-сервера.