5

这里出了点问题。请允许我介绍一下背景。

今天,我尝试推送到我们公司默认的裸 msysgit windows 服务器,并得到一个可怕的错误消息,在 SO 中到处重复关于推送到 non-bare 的信息。我认为这个消息很奇怪,因为我的服务器应该是光秃秃的。昨天它工作得很好。

然后我注意到core.bare,不知何故,设置为false!这是一个 repo --bare,它从来没有一个 " .git" 文件夹。然后我去检查,那里有一个 .git 文件夹,对我来说突然出现,令我沮丧!我问唯一一个可以在那里做某事的人,当然,他没有。

编辑:我只是注意到它只发生在master分支上,并且服务器.git似乎是在 10 月 1 日创建的,这可能是正确的,因为我不master经常推送。

该文件夹有 3gb,而裸文件夹,除了 ghostly 之外的所有 git 结构.git,有 6gb。虽然我的本地 .git 有 16 GB,所以我不确定那里发生了什么......更重要的是,我无法检查git loggit reflog. 将 bare 设置为 true 或 false 我得到同样的错误fatal: bad default revision 'HEAD'。现在我认为是时候考虑如何恢复回购了......

但在我了解所有恢复教条之前,我想知道:

  • 是否有某种git 活动日志,以便我可以看到在 git 中发出的所有命令,以及由谁发出的?

找不到类似的东西,我担心没有。

4

2 回答 2

3

这就是为什么我们在我们的中央 git repo 服务器上安装了gitolite V3(通过简单地克隆它的 repo并像在这个安装脚本中一样安装它)。

Gitolite 将拦截任何 git 命令,并且(除了它的主要授权框架功能之外)会将所述命令记录在~/.gitolite/logs/gitolite-log-xxx.

以下是此类日志的摘录:

2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-git-configs,POST_COMPILE
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-gitweb-access-list,POST_COMPILE
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/commands/access,%,gitweb,R,any
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/commands/git-config,-r,%,gitweb\.
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-git-daemon-access-list,POST_COMPILE
2012-08-16.12:20:20     29507           system,/home/gitadmin/gitolite/bin/commands/access,%,daemon,R,any
2012-08-16.12:20:20     29507   END
2012-08-20.07:39:12     17683   ssh     ARGV=gitoliteadm        SOC=git-upload-pack 'gitolite-admin'    FROM=127.0.0.1
2012-08-20.07:39:12     17683           access(gitolite-admin, gitoliteadm, R, 'any'),-> refs/.*
2012-08-20.07:39:12     17683           trigger,Writable,access_1,ACCESS_1,gitolite-admin,gitoliteadm,R,any,refs/.*
2012-08-20.07:39:12     17683   pre_git gitolite-admin  gitoliteadm     R       any     -> refs/.*
2012-08-20.07:39:12     17683           system,git,shell,-c,git-upload-pack '/home/gitadmin/repositories/gitolite-admin.git'
2012-08-20.07:39:12     17683   END
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-git-configs,POST_COMPILE
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-gitweb-access-list,POST_COMPILE
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/commands/access,%,gitweb,R,any
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/commands/git-config,-r,%,gitweb\.
2012-08-16.12:20:19     29507           system,/home/gitadmin/gitolite/bin/triggers/post-compile/update-git-daemon-access-list,POST_COMPILE
2012-08-16.12:20:20     29507           system,/home/gitadmin/gitolite/bin/commands/access,%,daemon,R,any
2012-08-16.12:20:20     29507   END
2012-08-20.07:39:12     17683   ssh     ARGV=gitoliteadm        SOC=git-upload-pack 'gitolite-admin'    FROM=127.0.0.1
2012-08-20.07:39:12     17683           access(gitolite-admin, gitoliteadm, R, 'any'),-> refs/.*
2012-08-20.07:39:12     17683           trigger,Writable,access_1,ACCESS_1,gitolite-admin,gitoliteadm,R,any,refs/.*
2012-08-20.07:39:12     17683   pre_git gitolite-admin  gitoliteadm     R       any     -> refs/.*
2012-08-20.07:39:12     17683           system,git,shell,-c,git-upload-pack '/home/gitadmin/repositories/gitolite-admin.git'
2012-08-20.07:39:12     17683   END
于 2012-10-11T12:12:07.337 回答
1

您可以使用 reflog 来查看引用的移动方式,注册活动有时从通常的 git 日志中不可见(例如快进合并),但我认为这对您的情况无关紧要。

我相信你有这样的结构(顺便建议将 .git 扩展名放在裸仓库名称中,这样很容易区分): ../core.bare.git/ 包含分支、配置、HEAD、钩子、信息、对象等 ../core.bare.git/.git 包含自己的一组分支、配置等我认为你在服务器上的 repo 完全没问题,你只需要从中删除 .git 文件夹并仔细检查配置文件仍然说它是一个裸仓库。

于 2012-10-10T21:37:19.243 回答