Как мне восстановиться после отправки файла gitosis.conf с ошибками разбора из-за разрывов строк? - PullRequest
16 голосов
/ 19 августа 2009

Я успешно настроил 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, в прогоне return app.main ()

Файл "/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py", строка 38, в основном self.handle_args (парсер, cfg, опции, аргументы)

Файл "/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, имя файла)

Файл "/usr/lib/python2.5/ConfigParser.py", строка 490, в _read поднять е

ConfigParser.ParsingError: Файл содержит ошибки синтаксического анализа: ./gitosis-export/../gitosis.conf

(...)

Я удалил разрыв строки и исправил коммит на

git commit -m "fix linebreak" --amend

Однако git push все равно выдает точно такую ​​же ошибку. Это заставляет меня поверить, что гитоз мешает мне делать какие-либо дальнейшие толчки.

Как мне восстановиться после этого?

Ответы [ 2 ]

27 голосов
/ 23 августа 2009

Я делаю это все время. :-) Ответ заключается в том, чтобы войти на сервер gitosis и отредактировать там копию файла конфигурации. В домашнем каталоге пользователя, которому принадлежит экземпляр gitosis, должна быть ссылка с именем .gitosis.conf (на самом деле она указывает на gitosis-admin.git / gitosis.conf). Отредактируйте этот файл и устраните проблемы там; тогда, когда вы нажмете далее, все будет хорошо.

2 голосов
/ 02 апреля 2010

Вы можете сделать что-то немного более умное. Поскольку gitosis-admin.git является архивом git, вы можете клонировать его локально, восстановить работоспособную версию и зафиксировать изменения. Одна хитрость заключается в том, что вы должны делать все как пользователь "git".

Мы сделали это таким образом, но планируем перейти на gitolite, который проверяет ошибки перед тем, как вносить изменения именно по этой причине.

изменить на пустой каталог, в который пользователь "git" имеет права на запись

sudo -H -u git git clone (каталог репозитория gitosis) /gitosis-admin.git

cd gitosis-admin

sudo -H -u git git rebase -i (идентификатор фиксации последнего известного рабочего состояния)

, например

sudo -H -u git git rebase -i HEAD ^^

с интерактивным флагом сложнее ошибиться; следуйте инструкциям, чтобы выбрать только правильный (известный для работы) коммит

sudo -H -u git git push -f мастер-источник

Флаг -f заставляет git делать push, даже если основная ветвь в репо не является предком вашей новой ветки. Это должно решить проблему, и вы должны быть в состоянии вытолкнуть / вытянуть как обычно из ваших местных филиалов.

...