我遇到了一个奇怪的问题,我认为这可能是一个错误。
我将配置更改推送到了 Git 服务器。这包括一个新的存储库,因此在推送后我登录到服务器来创建并初始化存储库(作为主产品存储库 teamer.git 的副本):
rwel@ve-git:/home/git/repositories/teamer$ sudo su git
git@ve-git:~/repositories/teamer$ git clone --bare ../teamer.git analytics.git
git@ve-git:~/repositories/teamer$ gitolite setup
奇怪的是,运行“gitolite setup”似乎恢复了我的更改!在存储库中,出现了一个新的提交,其配置的状态与之前的状态完全相同:
这里发生了什么以及我该如何解决它?如果您需要更多信息,请告诉我。
谢谢!
编辑:推送新配置后出现一些错误,可能与此有关:
gitolite-admin rwel$ git push origin
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 1.07 KiB, done.
Total 7 (delta 2), reused 0 (delta 0)
remote: *** hooks.mailinglist is not set so no email will be sent
remote: *** for refs/heads/master update 85dd4c5e7592fadbdb0d445a245a8763d6e2042b->1063acec3b106b348fadac655d154a78ea15ead5
remote: FATAL: no files/dirs called 'hooks' or 'logs' are allowed
最佳答案
我想我发现了问题。我将我的(通用)钩子(Hook)放置在 Gitolite 管理存储库的根目录中([gitolite-admin.git]/hooks/common
)。 Git 不喜欢这样,因此出现错误:
remote: FATAL: no files/dirs called 'hooks' or 'logs' are allowed
可能是因为这个,我的 Gitolite 安装变得困惑,安装脚本似乎试图恢复失败的提交。
修复
首先,我必须通过将
gitolite-admin.git
存储库克隆到服务器上来清理它,将其重置为HEAD^
并强制将其推回存储库(如解释 here )。git@ve-git:~/temp$ git reset --hard HEAD^ git@ve-git:~/temp$ gitolite push origin -f
为了修复 fatal error ,我只需将 Hook 移动到子目录 as advised in the documentation (在基于步骤 1 中重置
master
的分支中):$ git checkout -b hooksfix origin/master $ mkdir extra $ mv hooks extra $ git add --all $ git commit -m "moved hooks directory to prevent errors" $ git push origin hooksfix:master
为了完成这项工作,我还必须向 Git 服务器上的
.gitolite.rc
文件添加一行:LOCAL_CODE => "$ENV{HOME}/.gitolite/extra",
推送此命令后, fatal error 消失了。然后,我继续在固定的
master
上重新调整我的初始更改,现在也可以毫无问题地推送它。$ git checkout master $ git rebase origin/master $ git push origin
关于gitolite 设置恢复了更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13453090/