Я решил похожую проблему. Возможно, это не совсем то, что происходит в вашем случае, но вы можете попробовать применить то же устранение неисправностей, что и я.
Я понял, что когда я нажимал клавиши для нового пользователя, я получал эту трассировку стека, что является признаком того, что ловушка на жито не смогла обработать новый ключ.
remote: Traceback (most recent call last):
remote: File "/usr/local/bin/gitosis-run-hook", line 9, in <module>
remote: load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-run-hook')()
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run
remote: return app.main()
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main
remote: self.handle_args(parser, cfg, options, args)
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 81, in handle_args
remote: post_update(cfg, git_dir)
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 45, in post_update
remote: config=cfg,
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 95, in set_export_ok
remote: for (dirpath, repo, name) in walk_repos(config):
remote: File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 72, in walk_repos
remote: assert ext == '.git'
remote: AssertionError
Ошибка показала только ONCE , поэтому я наивно отклонил это как кратковременный сбой.
На практике Gitosis работал только для моего ключа, но не работал ни для одного из пользователей, которых я пытался поддерживать. В ~/.ssh/authorized_keys
я не смог найти открытый ключ пользователя, который, как мне показалось, я только что добавил. Вот почему моего друга постоянно спрашивали пароль каждый раз, когда он пытался клонировать.
Я добавил отладку в конфигурацию Gitosis, добавив эти две строки в gitosis.conf
[gitosis]
loglevel=DEBUG
Мне приходилось продолжать добавлять и удалять пользователей в файле gitosis.conf, чтобы перехват снова запускался. Мой журнал отладки показал
remote: DEBUG:gitosis.gitdaemon:Deny 'syncShare'
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d', seeing ['buildtools', 'QA_Dashboard']
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d/buildtools', seeing ['.git', 'conf', 'scripts']
remote: Traceback (most recent call last):
etc ...
A-ха! Когда хук выполнил «обход» через репозиторий, он обнаружил каталог .git
в legacy.d/buildtools
, и именно там произошел assert ext == '.git'
.
Я использовал сервер для хранения простого клона из какого-то другого хранилища. Обратите внимание, простой клон, а не зеркало или голое хранилище. Как и любой клон, он содержал каталог .git.
Хук в Gitosis не знает, что делать с каталогом .git. Он думает, что это хранилище с пустым именем и прерывает работу. Как только я уничтожил этот клон, все снова заработало.