git - 一个损坏的 git repo 会损坏另一个吗?
问题描述
我刚刚从损坏的回购情况中恢复过来,现在我正在尝试了解可能导致它的原因。
设置:
中央裸 Git 存储库:此服务器断电(意外)。这可能会导致磁盘损坏(这是一个 btrfs fs 和一个“scrub”操作说它是干净的,但它可能在 Git 操作中死掉了?)
本地开发虚拟机:我不知道这件事受到了不好的对待,但我认为出现问题的可能性很小。我整天都在愉快地工作,包括提交,没有任何问题。
当我尝试git push
从本地开发人员到中央仓库时,我注意到了这个错误。我想当我看到一个错误时,我可能已经做了一个git pull
(通常当有一个错误推动它时,因为你需要先拉,所以我可能本能地这样做了)。那是错误开始的时候。
中央回购显然是腐败的:git fsck
只是段错误!但它似乎也严重破坏了我的本地仓库。在本地,我可以运行fsck
它报告了一些悬空提交,但除此之外没有错误。但随后尝试任何其他操作报告目录中的空文件.git
并停止。然后删除那些会产生更严重的错误。
最后,我通过获取中央存储库的已知良好备份来修复;克隆那个;移动克隆的.git
目录来代替我本地损坏的目录;在旧提交之上提交我的工作树(所以我丢失了单独的提交,但没有丢失我的结束代码);推动。
我意识到我没有包含任何详细的错误,这不是问题的重点。
我的问题是:从损坏的远程仓库中提取/获取是否可能会破坏我的本地仓库?
我一直认为不会,但不同机器上的 2 个存储库似乎不太可能同时损坏。
解决方案
我的问题是:从损坏的远程仓库中提取/获取是否可能会破坏我的本地仓库?
是的。如果有一些东西没有被检查——而你有段错误的事实git fsck
表明有——那么将数据复制到本地存储库的 fetch 步骤可以复制一些没有被检查的东西。
通常,这表明 Git 中存在错误,因为它应该检查. 中的所有内容,git fsck
而不是 segfault。:-) 一些不太明显的问题,例如无效的树或标签条目,可能会逃避git fetch
运行的更随意的检查,但如果您可以将损坏的存储库保存在某处并允许 Git 开发人员访问它,他们可能能够查明问题并防止它在将来再次发生。
推荐阅读
- mysql - 连接两个大表时性能不佳
- php - 如果购买的商品缺货,则 WooCommerce 最低订单量
- python - 为什么在 python 中使用方括号和 if 不会出错
- javascript - PHP bootstrap 4删除按钮不获取ID
- python - Python中使用Tkinter的身份验证系统
- apache-spark - 得到这个错误:不匹配的输入'来自'期待
而 Spark SQL - python-3.x - 从外部python脚本调用需要root权限的python函数(pynq库)不断崩溃
- html - 如何从包含的组件中调用容器组件
- sql - 如何从表格列中获取最低和最高日期?
- python - 带有 Raspberry Pi 硬件的 PyQt5 GUI