Под Ubuntu и Debian последние зафиксированные файлы получают установленный бит выполнения, когда я пытаюсь оформить заказ позже. Это довольно странно и сводит меня с ума
$ ls -l file
-rw-r--r-- ... file
# on branch master:
$ git commit -m 'mode is 644' file
[master 0123456] mode is 644
1 files changed, 1 insertions(+), 1 deletions(-)
# All ok
$ git checkout dev-branch
Switched to branch 'dev-branch'
# Seemingly all ok, but file now has the exec bit set
$ git merge master
Updating 6543210..0123456
error: Your local changes to 'file' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
# Oops...
$ ls -l file
-rwxr-xr-x ... file
Кто-нибудь знает, когда и почему проскальзывает бит выполнения? core.filemode
установлен в true
.
У меня есть файл, открытый в vim во время переключения веток, если это как-то важно.
Приложение 1: Это касса, где разрешения испорчены. Я могу играть в игру дальше и дальше:
$ git br
* master
dev-branch
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
$ chmod 644 file
$ git diff
$ git checkout dev-branch
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
$ chmod 644 file
$ git diff
$ git checkout master
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
# ...and so on ad inf.
Приложение 2: Это происходит, кстати, для каждого файла в этом репозитории, который я фиксирую. После успешного коммита я не могу поменять ветки без провала разрешения.
git-log
вообще ничего не показывает, ни для комбинацииmaster
,dev-branch
ниHEAD
(что странно, не так лиmaster
?Ответы:
Не пользователь Git, но я считаю, что Git хранит маску разрешений всего файла.
Это означает, что вы когда-то установили файл на исполняемый файл, который Git подобрал и реплицировал в репозитории. Поэтому вы должны изменить саму маску разрешений файла перед фиксацией.
Чтобы Git игнорировал такие изменения, используйте
Из git-config (1) :
источник
core.fileMode
, но я надеялся, что смогу уйтиtrue
.Вы проверяли, есть ли пользовательский хук, который выполняется во время фиксации или извлечения? Там могут быть некоторые пользовательские хуки, подделывающие ваши файлы. Оформить заказ на страницу githooks .
Хуки - это в основном маленькие программы, вызываемые git при определенных событиях (коммит, извлечение и т. Д.).
источник
.git/hooks
каталог не тронут.вы пробовали git commit -m 'mode is 644' файл на ветке dev-branch
мне кажется, что происходит то, что вы меняете права доступа на главном, а затем вытаскиваете ветку разработчика, у которой есть неправильное разрешение, и засоряете ваше локальное разрешение. затем пытаясь совершить снова. либо клонировать, изменить, совершить, объединить; или попробуйте изменить файл по отдельности с помощью одного файла в dev, а затем объединить
источник
chmod
однажды поработал над файлами, но, к сожалению, не могу вспомнить, если проблема начала возникать сразу после этого. Я думаю, это не так.Есть хорошие ответы по этим ссылкам.
/programming/9027584/how-to-change-the-file-mode-on-github
а также
/programming/1611211/how-do-i-make-git-accept-mode-changes-without-accepting-all-text-changes
По сути, вам нужно,
git update-index --chmod=(+|-)x <file>
и это добавит изменение, которое вам затем нужно будет зафиксировать и нажать для добавления / удаления разрешений.источник