Как я могу оправиться от нажатия gitosis.conf с ошибками синтаксического разбора из-за разрывов строк?
Я успешно установил gitosis для Android-зеркала (содержащего несколько репозиториев git). Добавляя новый путь .git после writeable = в gitosis.conf, мне удалось вставить несколько разрывов строк. Сохранено, зафиксировано и отправлено на сервер, когда я получил следующую ошибку синтаксического анализа:
Traceback (последний последний вызов): Файл "/usr/bin/gitosis-run-hook", строка 8, в load_entry_point ('gitosis == 0.2', 'console_scripts', 'gitosis-run-hook')()
Файл "/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py", строка 24, в run return app.main()
Файл "/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py", строка 38, в главном self.handle_args (парсер, cfg, опции, args)
Файл "/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/run_hook.py", строка 75, в handle_args post_update (cfg, git_dir)
Файл "/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/run_hook.py", строка 33, в post_update cfg.read(os.path.join(export, '..', 'gitosis.conf'))
Файл "/usr/lib/python2.5/ConfigParser.py", строка 267, при чтении self._read (fp, filename)
Файл "/usr/lib/python2.5/ConfigParser.py", строка 490, в _read поднять e
ConfigParser.ParsingError: файл содержит ошибки синтаксического анализа:./gitosis-export/../gitosis.conf
(...)
Я удалил разрыв строки и поправил фиксацию на
git commit -m "fix linebreak" --amend
Однако git push все же дает ту же самую ошибку. Это приводит меня к мысли, что гитоз не мешает мне делать дальнейшие толчки.
Как мне оправиться от этого?
Ответы
Ответ 1
Я делаю это все время.:-) Ответ заключается в том, чтобы войти на сервер gitosis и отредактировать копию файла конфигурации там. В домашнем каталоге пользователя, которому принадлежит экземпляр gitosis, должна быть ссылка с именем .gitosis.conf(она фактически указывает на gitosis-admin.git/gitosis.conf). Отредактируйте этот файл и устраните проблемы; тогда, когда вы нажмете дальше, все будет хорошо.
Ответ 2
На самом деле вы можете сделать что-то немного более умное. Поскольку gitosis-admin.git является архивом git, вы можете клонировать его локально, reset в рабочую версию и фиксировать изменение. Один трюк заключается в том, что вы должны делать все как пользователь "git".
Мы сделали это так, но мы планируем перейти на гитолит, который проверяет ошибки перед включением изменений именно по этой причине.
перейти в пустой каталог, к которому пользователь "git" имеет доступ на запись
sudo -H -u git git клон (каталог репозитория gitosis)/gitosis-admin.git
cd gitosis-admin
sudo -H -u git git rebase -i (идентификатор фиксации последнего известного рабочего состояния)
например.
sudo -H -u git git rebase -i HEAD ^^
с интерактивным флагом, сложнее сделать ошибку; следуйте указаниям, чтобы выбрать только право (известно для работы) commit
sudo -H -u git git push -f origin master
Флаг -f заставляет git выполнять push, даже если главная ветка в репо не является предком вашей новой ветки. Это должно устранить проблему, и вы должны иметь возможность выталкивать/тянуть как обычно из своих локальных ветвей.