Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的git存储库是如何不断损坏的?_Git_Bitbucket - Fatal编程技术网

我的git存储库是如何不断损坏的?

我的git存储库是如何不断损坏的?,git,bitbucket,Git,Bitbucket,我使用的是ubuntu 14.10(64位),git版本2.1.0。这是一个已经存在多年的存储库,最近开始出现问题 有时我会更改分支、编辑文件并键入git status。它将显示一组“已修改”的文件,这些文件实际上根本没有更改 如果我键入以下内容: $git commit-am“固定短信” 我会遇到如下错误: error: short read No such file or directory error: globalstatic/images/console/avatar_f.gif: f

我使用的是ubuntu 14.10(64位),git版本2.1.0。这是一个已经存在多年的存储库,最近开始出现问题

有时我会更改分支、编辑文件并键入git status。它将显示一组“已修改”的文件,这些文件实际上根本没有更改

如果我键入以下内容:

$git commit-am“固定短信”

我会遇到如下错误:

error: short read No such file or directory
error: globalstatic/images/console/avatar_f.gif: failed to insert intodatabase
error: unable to index file globalstatic/images/console/avatar_f.gif
fatal: updating files failed
如果除了按向上箭头键并再次按enter键之外,我什么也不做,那么我将得到一个关于下一个文件的错误,该文件显示在
git status
中,但实际上从未更改过。我可以这样做,直到我用尽了
git status
中未更改的文件列表,然后它将正确提交

git fsck--full
确实报告它发现了问题,但实际上并没有修复任何问题。我只需要一直努力,直到成功。下面是git fsck的输出--full,当它给我带来问题时:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (120625/120625), done.
dangling tag c7539416829fb0748bc32dda3beb386bac46ea9a
dangling blob 88a0700db2a75e6ea2b14b9a5af15ece63a80805
dangling blob f4c664b0044f3d5efff1148717dc68b940e08574
dangling blob 1bf6185091177fd5a496f5bf031f4d666fec92da
dangling commit fee4bdcc078789a3745aa1311f128a6b61a81736
dangling blob 9f14e68da29d49895b1ea303ed33cb390fc56b76
dangling blob 784a02e974b81f35952fb7c31bf2dcb1a7bfeda8
dangling blob 9e92d6cf395206152123f9a29edb95652114fd34
dangling commit 1294f626dcb76cafa560f65792517655fb8a52ae
dangling blob bceb1adde285e71109723211a1bcb5b0fa126681
dangling tag 19f4be8e7b53465b13359bc4350b5e87c5942560
dangling blob 93f96a3b5e995032a50723af796dab9ae36fb974
dangling blob a25bdfab82fef920935478ee2cefe4dc2e81bbf6
dangling blob af7187350341f3d7795d35cc1f0cee78eb9f9fdf
dangling blob e2a1db9e3d3d438c8b03cb6254ca492e505be6f8
如果我多次运行它,我会收到相同的消息。没有什么变化

发生了什么事?

不知道发生了什么事(除了注意到明显的问题,有什么东西正在破坏你的git回购协议),但我知道我如何解决这样的问题-我希望这是一个隐含的问题

  • 将您的回购推到某个地方(本地裸存储库就可以了)
  • 将旧存储库重命名为
    myrepo.breaked
    或类似名称
  • 查看您推到上一个位置的回购协议的新副本
  • 一旦你确定你没有损失任何东西,删除旧的回购协议
与回购协议本身相比,我更喜欢上述方法。但如果你坚持(我会先备份):

  • 请注意,悬空的blob和commit可能根本没有问题-请参阅例如。短读的事情不应该发生
  • git-gc--prune=now
    将删除所有悬空的blob和提交
  • 这是一个关于维护和数据恢复的教程
就目前所发生的事情而言,我和

  • 当NFS服务器不可靠时,NFS装载的主目录包含git树
  • 不区分大小写的归档系统
  • 断电/系统崩溃导致FS损坏,或在提交过程中发生
  • 系统中身份不明的小精灵

避免第一个和第二个重复是很容易的,第三个是可以理解的,但第四个往往很棘手。避免在午夜后进食。

我试试看。谢谢最糟糕的是,小精灵很可能是原因之一。可以是病毒、扫描仪、文件备份系统等。当文件被修改时,会动态修改文件。需要考虑的是,考虑一下最近环境中发生了什么变化(您是否进行了更新?是否安装了新软件?)我想是时候检查一下您的文件系统和驱动器了。。。不仅仅是回购协议。特别是因为它抱怨工作目录中的文件(除了
git-fsck
问题之外)。这个文件存储在什么类型的文件系统上?它是由Dropbox或类似的东西同步的吗?事实上,仔细看,你的回购协议看起来并没有损坏。悬空对象可能是不再存在的分支的结果,也可能是重定工作基准的结果。悬挂的标签有点可疑,但可能是因为您在途中的某个地方删除了一个标签。似乎正在发生的事情是Git不会承诺回购协议。您可以尝试将
GIT_TRACE=2
添加到命令行的开头,以获得有关正在发生的事情的更多信息。@jszakmeister这是一个ext4 FS。我没有让它通过dropbox或任何东西进行同步,尽管我确实在virtualbox实例中通过vboxsf安装了它。virtualbox实例可能正在修改文件,但我不确定如何修改。下次发生这种情况时,我将尝试
GIT_TRACE
。@jszakmeister-Hah,我很确定我刚刚发现了问题。它发生在我在virtualbox中恢复快照之后(我想)。我还要做更多的测试,但我很确定就是这样。