概述:
我无法成功将我们的仓库中的更改拉到我们的生产服务器。
在我的仓库上运行“git fsck”返回了5个相同错误的实例:
warning in tree [hash]: contains entries pointing to a null sha1
我们代码库的所有版本,包括托管在Bitbucket上的版本,都存在该错误。
我和同事在本地代码库中都有未推送和未提交的更改,我们希望能够保存这些更改。
我已经尝试通过谷歌、Stack Overflow和man页面来解决问题,但是我找不到一个好的指南来解释发生了什么或如何解决问题。
我和我的同事在GIT方面相对新手。我们掌握了基础知识,但还没有花时间学习底层命令。
我将非常感激任何形式的帮助,以恢复我的代码库完整性。
详细描述:
当我尝试将远程分支拉到我的生产服务器时,我的问题开始出现。这应该只是一个简单的工作目录更新,但是我得到了一些模糊的错误,我记不清是什么了,并发现我的工作目录已损坏。
失败的合并后,Git状态报告了大量未跟踪和修改的文件。我无法用git命令解决问题,因此我手动操作文件系统以删除文件(但我未触及.git目录中的任何内容),并将工作目录恢复到了一个状态,我的生产服务器可以无误地提供网站服务。
在我的代码库上运行“git fsck”返回了5个相同错误的实例:
warning in tree [hash]: contains entries pointing to a null sha1
我在以下位置运行了git fsck:
- 我的开发机上的存储库
- 我的同事的开发机
- 从bitbucket上克隆的全新版本存储库,在开发和生产环境中都是如此
无论我尝试什么,都显示相同的警告。所以无论问题是什么,它都存在于我们存储库的所有版本中。
调用“git ls-tree [ tree hash reporting an error ]”会显示一个正常的目录输出,以及错误树哈希:
160000 commit 0000000000000000000000000000000000000000 [name of repo]
我找到的最接近解决方案的是这个stackoverflow帖子:如何在Git树中删除sha1为空的条目。然而,我无法真正理解步骤,复制粘贴命令也未能解决我的问题。
我的问题:
1. 这些错误是什么意思?它们有多严重? 2. 我们如何修复我们的repo(如果可能,请为我们新手一步一步地进行)? 3. 在修复之前或之后,我们应该提交和推送所有更改到repo吗? 4. 修复的影响是什么?我们如何将修复分发到repo的所有版本(例如,到开发机器和生产服务器)? 5. 是什么导致了这个错误?我们如何防止它再次发生?