16

我已成功为 Android 镜像(包含多个 git 存储库)设置了 gitosis。在 gitosis.conf 中的 writable= 之后添加一个新的 .git 路径时,我设法插入了一些换行符。当我收到以下解析错误时,已保存、提交并推送到服务器:

回溯(最后一次调用):文件“/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 行,返回 app.main()

文件“/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py”,第 38 行,在 main self.handle_args(parser, cfg, options, 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)

_read raise e 中的文件“/usr/lib/python2.5/ConfigParser.py”,第 490 行

ConfigParser.ParsingError:文件包含解析错误:./gitosis-export/../gitosis.conf

(...)

我已经删除了换行符并修改了提交

git commit -m "修复换行" --amend

但是 git push 仍然会产生完全相同的错误。它让我相信 gitosis 正在阻止我做任何进一步的推动。

我该如何从中恢复?

4

2 回答 2

27

我一直这样做。:-) 答案是登录到 gitosis 服务器并在那里编辑配置文件的副本。在拥有 gitosis 实例的用户的主目录中,应该有一个名为 .gitosis.conf 的链接(它实际上指向 gitosis-admin.git/gitosis.conf)。编辑该文件并修复那里的问题;然后,当你下一个推的时候,就可以了。

于 2009-08-23T06:19:28.467 回答
2

你实际上可以做一些更聪明的事情。由于 gitosis-admin.git 是一个 git 存档,您可以在本地克隆它,重置为工作版本并提交更改。一个技巧是你必须以“git”用户的身份做所有事情。

我们是这样做的,但我们计划更改为 gitolite,它会在合并更改之前检查错误,正是出于这个原因。

更改为“git”用户具有写入权限的空目录

sudo -H -u git git clone (gitosis repo 目录)/gitosis-admin.git

cd gitosis-admin

sudo -H -u git git rebase -i (最后一个已知工作状态的提交 ID)

例如

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

使用交互式标志,更难出错;按照说明仅选择正确的(已知有效)提交

sudo -H -u git git push -f origin master

-f 标志强制 git 进行推送,即使 repo 中的主分支不是新分支的祖先。这应该可以解决问题,并且您应该能够像往常一样从本地分支机构推/拉。

于 2010-04-01T22:43:24.630 回答