Git поверх самбы больше не может извлекать/добавлять/фиксировать

Я использовал git через самбу несколько раз без каких-либо проблем.

Однако в последние дни кажется невозможным git all/fetch/commit

Ошибка:

error: insufficient permission for adding an object to repository database .git/objects

Используя strace, я вижу, что ошибка связана с вызовом при открытии:

[pid 31303] open(".git/objects/b7/tmp_obj_6wi717", O_RDWR|O_CREAT|O_EXCL, 0444) = -1 EACCES (Permission denied)
[pid 31303] write(2, "error: insufficient permission f"..., 88error: insufficient permission for adding an object to repository database .git/objects

Я не могу понять, что изменилось и почему git пытается открыть файл в 444 (чтение для всех) с флагом RDRW (чтение/запись?).

Я использую git 1.8.5.1 и samba 4.1.3-1 на archlinux, сервер samba — это windows (git 1.8.4-1 не решает проблему, даже если я использовал его, пока он еще работал)

Я прочитал другие вопросы SO, такие как Git поверх самбы - невозможно записать имя файла sha1 | В доступе отказано, но не найдено никаких подсказок о том, как решить проблему.


person kamaradclimber    schedule 13.12.2013    source источник
comment
Аргумент режима указывает разрешения для создания файла. Похоже, что .git/objects больше не доступен для записи вашим пользователем. каковы разрешения и права собственности на него? Если вы запустите git config --list |grep shared в общем репозитории, увидите ли вы core.sharedrepository=true?   -  person asm    schedule 13.12.2013


Ответы (2)


Вы можете увидеть различные способы отладки в разделе "Отладка разрешений репозитория git для общего ресурса samba":

  • установка разных разрешений для общего доступа
  • монтаж вручную
  • понижение версии samba и git до более ранних версий
  • sudo - это работает, но я бы не хотел использовать его без крайней необходимости
  • изменение владельца и группы после использования sudo

Эндрю Майерс предлагает убедиться, что в вашем голом репо есть core.sharedRepository установите для группы.
Если нет, установите его и запустите

cd /path/to/repo.git
chgrp -R groupname .
chmod -R g+rwX .
find . -type d -exec chmod g+s '{}' +

Если ничего не работает, убедитесь, что проблема не связана с версией ядра:

Я понизил ядро ​​​​до 3.11.6 и git add/commit, когда пользователь снова начал работать.


Обновление: отчеты OP kamaradclimber (или пытались), это была проблема с ядром (ошибка 66251):

Git неправильно работает с ресурсом samba после обновления ядра с 3.11.6 до 3.12.1

Исправлено этим патчем.

person VonC    schedule 14.12.2013
comment
Я уже безуспешно пытался откатить версии git и samba, но никогда не пытался попробовать другое ядро. - person kamaradclimber; 15.12.2013
comment
@kamaradclimber, какая у тебя была версия ядра? А до какой версии вы откатились? - person VonC; 16.12.2013
comment
@kamaradclimber, кстати, я включил в ответ ваше (отклоненное) редактирование. - person VonC; 16.12.2013
comment
(вопрос, не связанный с этим) что означает ОП? - person kamaradclimber; 17.12.2013
comment
@kamaradclimber urbandictionary.com/define.php?term=op или acronyms.thefreedictionary.com/original+poster: Исходный плакат (может также относиться к вопросу: Исходный пост ). - person VonC; 17.12.2013

В моем случае похоже, что Git (v 2.6.3) пытался создать свои собственные разрешения на чтение/запись на диске Samba. Это предотвратит запись файлов пакета и/или объектов (ошибка распаковки).

remote: error: unable to write sha1 filename ./objects/pack/pack-<some_hex_string>.pack: Permission denied
remote: fatal: cannot store pack file
error: unpack failed: index-pack abnormal exit
To z:\git\<repo name>
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs

Я ходил взад и вперед, пытаясь исправить. Наконец, поскольку у меня был контроль над машиной Samba, я добавил строку в конфигурацию диска Samba, в которой говорится «наследовать разрешения = да». Я перезапустил Samba и попытался нажать. Это сработало!

Это сработало для меня, так как я единственный человек, использующий сервер Samba. Для других вы можете поиграть с «режимом принудительного каталога» или «режимом принудительного создания». Вы можете найти справочные страницы для тех, кто находится здесь:

https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/AccessControls.html

person lsu_guy    schedule 13.12.2015