2

我遇到了一个奇怪的问题,我认为这可能是一个错误。

我将配置更改推送到 Git 服务器。这包括一个新的存储库,因此在推送后我登录到服务器以创建和初始化存储库(作为主要产品 repo 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”似乎恢复了我的更改!在存储库中,出现了一个新的提交,与之前的配置状态完全相同:

GitX 屏幕截图 这里发生了什么,我该如何解决?如果您需要更多信息,请告诉我。

谢谢!


编辑:推送新配置后出现一些错误,可能与此有关:

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
4

1 回答 1

2

我想我找到了问题所在。我将我的(常用)钩子放在 Gitolite 管理存储库 ( [gitolite-admin.git]/hooks/common) 的根目录中。Git不喜欢这样,因此错误:

remote: FATAL: no files/dirs called 'hooks' or 'logs' are allowed

可能正因为如此,我的 Gitolite 安装搞砸了,安装脚本似乎试图恢复失败的提交。

修复

  1. 首先,我必须通过在服务器上克隆它来清理存储库中的混乱,gitolite-admin.git将其重置HEAD^并强制将其推回存储库(如此所述)。

    git@ve-git:~/temp$ git reset --hard HEAD^
    git@ve-git:~/temp$ gitolite push origin -f
    
  2. 为了修复致命错误,我只是按照文档中的建议将挂钩移动到子目录(在基于master步骤 1 重置的分支中):

    $ 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
    

    为了完成这项工作,我还必须.gitolite.rc在 Git 服务器上的文件中添加一行:

    LOCAL_CODE                  => "$ENV{HOME}/.gitolite/extra",
    
  3. 推动这个之后,致命错误消失了。然后我将我的初始更改重新设置在 fixed 上master,现在也可以毫无问题地推动它。

    $ git checkout master
    $ git rebase origin/master
    $ git push origin
    
于 2012-11-20T09:52:55.517 回答