Переключение с ветви a на ветку b изменяет права доступа к файлу. Но возврат * назад * к ветке -a * не * отменяет права доступа к файлу. Это почему? - PullRequest
0 голосов
/ 15 апреля 2020

В настоящее время в моем локальном репо я извлек ветку с именем mybranch, и все мои файлы имеют разрешения 644 ( снимок экрана ). В рабочем каталоге нет правок и в промежуточной области ничего нет. Если я извлекаю ветку master, разрешения для двух файлов меняются на 664 ( снимок экрана ). Если я сразу же извлечу mybranch снова, разрешения этих файлов не изменятся обратно на 644 - они останутся на 664. У меня есть три связанных вопроса:

  1. Почему разрешения не меняются назад на 644 при оформлении заказа mybranch? Разве они не должны?

  2. Когда я извлекаю ветку master, почему эти изменения в разрешениях вообще происходят? Я думал Git отслеживал только разрешение пользователя на выполнение.

  3. Как правильно убедиться, что разрешения для всех файлов остаются на 644, независимо от ветви?


Несколько возможных замечаний:

  • Я создал этот репозиторий и главную ветвь, когда вошел в систему как отдельный пользователь Linux: user-a. В то время я не помню разрешения для двух рассматриваемых файлов. Но есть хороший шанс, что они могли быть 664.

  • После создания репо я начал использовать другого пользователя Linux: user-b. Я перенес весь репозиторий в другой каталог на компьютере, в область, доступную только по user-b. Вся моя текущая работа выполняется при входе в систему как user-b.

  • Мне кажется, я создал mybranch после того, как начал использовать user-b, но точно не помню .

  • В отдельном сообщении на форуме кто-то упомянул, что все разрешения сохраняются на уровне репо в файле .git/index. Поэтому возврат к ветви master всегда применяет разрешения, сохраненные в этом файле. Этот человек не знал, как просмотреть разрешения, установленные в этом файле, и сказал, что я могу использовать git-update-index для изменения разрешений в этом файле.

Заранее спасибо.

1 Ответ

1 голос
/ 15 апреля 2020

Git вообще не хранит групповые разрешения. 1 Файлы имеют либо mode 100644, что означает rw-, либо mode 100755, что означает, что они rwx.

Строки режима 100644 и 100755 соответственно означают rw-r--r-- и rwxr-xr-x соответственно при использовании в качестве Unix режимов. Изначально они были Unix (или Linux) режимами, но они уже давно, совсем недавно, едва ли кто-нибудь, кроме Линуса, использовал Git.

Вместо этого, когда Git создает файл самостоятельно, он использует аргумент mode либо 0666 (rw-rw-rw-), либо 0777 (rwxrwxrwx). Операционная система вашего компьютера затем обрабатывает некоторые из этих битов режима, основываясь на вашей личной настройке umask . Этот персональный параметр настраивается для каждого процесса и обычно является чем-то, что вы манипулируете в своей оболочке.

стандартные биты откола обычно равны ----w--w-, то есть rwxrwxrwx становится rwxr-xr-x , Это достигается с помощью параметра umask 022.

Чтобы указать вашей оболочке на создание новых процессов с битами отсечки, установленными на -------w-, используйте umask 002. (Вы можете не указывать начальные нули, если хотите; я хотел бы сохранить их для ясности.)

Изменение на 664 кажется странным, но, возможно, вы делаете это в оболочке с набором umask на 002 и выполнение проверок, которые оставляют вас с 644 в оболочке с установленным по умолчанию значением umask 022.


1 В случае общий bare репозиторий, есть определенные свойства групповых разрешений, которые применяются. Но это не то, что здесь происходит.

...