这里出了点问题。请允许我给出背景信息。
今天我尝试推送到我们公司的默认裸msysgit Windows服务器并获得dreaded error message duplicated everywhere in SO about pushing to non-bare。我认为这个消息很奇怪,因为我的服务器应该是裸的。昨天工作得很好。
然后我注意到 core.bare
以某种方式设置为 false
!这是一个名为--bare
的回购邮件,它从未有过{" .git
"文件夹里面。然后我去检查,那里是一个.git文件夹,对我来说,无处不在,令我沮丧!我问唯一能够在那里做过某事的人,当然,他没有做过。
编辑:我刚注意到它只发生在master
分支上,而服务器的.git
似乎是在10月1日创建的,这可能是正确的因为我不经常推动master
。
该文件夹有3GB,裸文件夹(幽灵.git
旁边的所有git结构)都有6GB。虽然我的本地.git有16 GB,但我不确定那里发生了什么...更多的是,我无法检查git log
或git reflog
。将裸设置为true或false我得到相同的错误fatal: bad default revision 'HEAD'
。现在我认为已经有时间考虑how to recover the repo ......
但在我完成所有恢复教条之前,我想知道:
找不到类似的东西,我担心没有。
答案 0 :(得分:3)
这就是为什么我们在我们的中央git repo服务器上安装了gitolite V3(只需在its repo中克隆installing it和this installation script)。
Gitolite将拦截任何git命令,并且(除了primary authorization framework功能之外)将在~/.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
答案 1 :(得分:1)
你可以使用reflog来查看引用是如何移动的,注册活动有时在通常的git日志中看不到(比如快进合并),但我不认为它在你的情况下是否重要。
我相信你有这样的结构(建议将.git扩展名放到裸仓库名称上,因此很容易区分): ../core.bare.git/包含分支,配置,HEAD,挂钩,信息,对象等 ../core.bare.git/.git包含自己的一组分支,配置等 我认为你在服务器上的repo完全没问题,你只需要从中删除.git文件夹并仔细检查配置文件是否仍然说它是一个裸仓库。