Как не дать git сменить владельца файла

Я заметил, что когда я извлекаю из своего репозитория github на сервере разработки (Red Hat), право собственности на файлы меняется после завершения извлечения. Файл .git раньше принадлежал мне, но потом я заметил, что он будет записывать файлы от имени меня, и мне нужно, чтобы он записывал файлы от имени другого пользователя. Поэтому я изменил владельца каталога .git.

Я наткнулся на git config core.filemode, что было правдой. С тех пор я установил ему false. Я не увидел разницы после установки значения false. Что мне делать, чтобы не допустить смены владельца моих файлов.

У меня локально такого не бывает.


person user2108258    schedule 25.02.2013    source источник


Ответы (2)


Если этого достаточно для сохранения группы, вы можете установить флаг setgid для каталогов. См. http://en.wikipedia.org/wiki/Setuid.

Установка разрешения setgid для каталога (chmod g+s) приводит к тому, что новые файлы и подкаталоги, созданные в нем, наследуют его идентификатор группы, а не основной идентификатор группы пользователя, создавшего файл (идентификатор владельца никогда не изменяется, только идентификатор группы). Вновь созданные подкаталоги наследуют бит setgid. Таким образом, это обеспечивает совместное рабочее пространство для группы без неудобств, связанных с требованием, чтобы члены группы явно изменяли свою текущую группу перед созданием новых файлов или каталогов. Обратите внимание, что установка разрешения setgid для каталога влияет только на идентификатор группы новых файлов и подкаталогов, созданных после установки бита setgid, и не применяется к существующим объектам. Установка бита setgid в существующих подкаталогах должна выполняться вручную с помощью следующей команды:

[root@foo]# find /path/to/directory -type d -exec chmod g+s '{}' \;

person nafg    schedule 24.04.2015
comment
Хорошее решение — всегда предпочитаю видеть решение проблемы, а не комментарий, основанный на том, что делает конкретное программное обеспечение. Использование битов gid — это легкая победа здесь. - person Aaron Dobbing; 24.03.2016

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

person jthill    schedule 25.02.2013
comment
По моему опыту с этим, я не могу сказать, что это полностью верно. Если я изменю владельца файлов в каталоге, а затем запущу «git pull», я получу разных владельцев для разных файлов. Некоторые корневые и некоторые меня, а некоторые нетронутые. - person user2108258; 26.02.2013
comment
git не хранит права доступа к файлам, поэтому любое поведение, с которым вы сталкиваетесь, не имеет прямого отношения к git как к системе контроля версий. - person wRAR; 26.02.2013
comment
Кому должен принадлежать каталог .git? Мой пользователь на сервере — это тот, кого я использую для извлечения из Github. Однако, если я использую себя как пользователя, файлы записываются на диск как я. Но я хочу, чтобы они принадлежали веб-серверу. - person user2108258; 26.02.2013
comment
Файлы, которые создает git, создаются с учетными данными любого пользователя, фактически выполняющего команду git. В unix (включая OS X) для запуска от имени другого пользователя вы можете sudo -u thatuser git somecommand; в Windows я уверен, что где-то есть эквивалент, - person jthill; 26.02.2013