解决Git object file is empty fatal的故障

一 故障背景:

公司源码管理工具从SVN迁移到Git之后,Git源码服务器采用本地bitbucket托管。在一次bitbucket服务器所在虚拟主机由于存储空间吃紧,导致bitbucket意外宕机的故障之后。恢复虚拟主机,启动bitbucket之后,发现有某个项目的某个repository故障,导致开发同事无法提交代码,耽误事儿。

二 解决过程:

1 首先,在bitbucket上新建立1个项目工程以及repository给上述失败的项目使用;

2 其次,让该项目的开发同事,拿本地的git源码push到该新建的工程下对应的repository里;

3 然后,手工删除原故障的工程以及其下的所有repository,在控制台上进入该repository的时候,报错:

 

4 其次,再想办法如何解决该500错误:

‘/usr/local/git/bin/git cat-file -t refs/heads/master:’ exited with code 128 saying: error: object file ./objects/f4/22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc is empty fatal: loose object f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc (stored in ./objects/f4/22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc) is corrupt

 

 

a 进入bitbucket服务器的BITBUCKET_HOME,/data/atlassian/application-data/bitbucket下的 shared/data/repositories子目录:

[root@localhost repositories]# pwd

/data/atlassian/application-data/bitbucket/shared/data/repositories

[root@localhost repositories]# ll

总用量 508

drwxr-xr-x. 7 root root 4096 12月 13 23:20 100

drwxr-xr-x. 7 root root 4096 12月 13 23:21 101

drwxr-xr-x. 7 root root 4096 12月 13 23:20 105

drwxr-xr-x. 7 root root 4096 12月 13 23:21 107

drwxr-xr-x. 7 root root 4096 12月 13 23:20 108

drwxr-xr-x. 7 root root 4096 12月 13 23:20 115

drwxr-xr-x. 7 root root 4096 12月 13 23:21 116

drwxr-xr-x. 7 root root 4096 12月 13 23:21 117

drwxr-xr-x. 7 root root 4096 12月 13 23:21 118

drwxr-xr-x. 7 root root 4096 12月 13 23:20 119

drwxr-xr-x. 7 root root 4096 12月 13 23:20 120

drwxr-xr-x. 7 root root 4096 12月 13 23:21 121

drwxr-xr-x. 7 root root 4096 12月 13 23:21 122

drwxr-xr-x. 7 root root 4096 12月 13 23:21 123

drwxr-xr-x. 7 root root 4096 12月 13 23:20 124

drwxr-xr-x. 7 root root 4096 12月 13 23:21 125

drwxr-xr-x. 7 root root 4096 12月 13 23:20 126

drwxr-xr-x. 7 root root 4096 12月 13 23:21 127

drwxr-xr-x. 7 root root 4096 12月 13 23:20 128

drwxr-xr-x. 7 root root 4096 12月 13 23:21 129

drwxr-xr-x. 7 root root 4096 12月 13 23:21 13

drwxr-xr-x. 7 root root 4096 12月 13 23:20 130

drwxr-xr-x. 7 root root 4096 12月 13 23:20 131

drwxr-xr-x. 7 root root 4096 12月 13 23:21 132

drwxr-xr-x. 7 root root 4096 12月 13 23:21 133

drwxr-xr-x. 7 root root 4096 12月 13 23:20 134

drwxr-xr-x. 7 root root 4096 12月 13 23:20 135

drwxr-xr-x. 7 root root 4096 12月 13 23:21 136

drwxr-xr-x. 7 root root 4096 12月 13 23:21 137

drwxr-xr-x. 7 root root 4096 12月 13 23:20 138

drwxr-xr-x. 7 root root 4096 12月 13 23:21 139

drwxr-xr-x. 7 root root 4096 12月 13 23:20 140

drwxr-xr-x. 7 root root 4096 12月 13 23:21 141

drwxr-xr-x. 7 root root 4096 12月 13 23:20 142

drwxr-xr-x. 7 root root 4096 12月 13 23:20 143

drwxr-xr-x. 7 root root 4096 12月 13 23:21 144

drwxr-xr-x. 7 root root 4096 12月 13 23:20 145

drwxr-xr-x. 7 root root 4096 12月 13 23:21 146

drwxr-xr-x. 7 root root 4096 12月 13 23:20 147

drwxr-xr-x. 7 root root 4096 12月 13 23:21 148

drwxr-xr-x. 7 root root 4096 12月 13 23:20 149

drwxr-xr-x. 7 root root 4096 12月 13 23:21 15

drwxr-xr-x. 7 root root 4096 12月 13 23:21 150

drwxr-xr-x. 7 root root 4096 12月 13 23:20 153

drwxr-xr-x. 7 root root 4096 12月 13 23:21 154

drwxr-xr-x. 7 root root 4096 12月 13 23:21 156

drwxr-xr-x. 7 root root 4096 12月 13 23:21 157

drwxr-xr-x. 7 root root 4096 12月 13 23:21 158

drwxr-xr-x. 7 root root 4096 12月 13 23:20 159

drwxr-xr-x. 7 root root 4096 12月 13 23:21 16

drwxr-xr-x. 7 root root 4096 12月 13 23:21 166

drwxr-xr-x. 7 root root 4096 12月 13 23:20 167

drwxr-xr-x. 7 root root 4096 12月 13 23:21 168

drwxr-xr-x. 7 root root 4096 12月 13 23:21 169

drwxr-xr-x. 7 root root 4096 12月 13 23:21 170

drwxr-xr-x. 7 root root 4096 12月 13 23:21 171

drwxr-xr-x. 7 root root 4096 12月 13 23:20 172

drwxr-xr-x. 7 root root 4096 12月 13 23:20 173

drwxr-xr-x. 7 root root 4096 12月 13 23:21 174

drwxr-xr-x. 7 root root 4096 12月 13 23:21 175

drwxr-xr-x. 7 root root 4096 12月 13 23:21 176

drwxr-xr-x. 7 root root 4096 12月 13 23:21 177

drwxr-xr-x. 7 root root 4096 12月 13 23:20 178

drwxr-xr-x. 7 root root 4096 12月 13 23:20 179

drwxr-xr-x. 7 root root 4096 12月 13 23:21 180

drwxr-xr-x. 7 root root 4096 12月 13 23:21 181

drwxr-xr-x. 7 root root 4096 12月 13 23:20 182

drwxr-xr-x. 7 root root 4096 12月 13 23:21 183

drwxr-xr-x. 7 root root 4096 12月 13 23:20 184

drwxr-xr-x. 7 root root 4096 12月 13 23:21 185

drwxr-xr-x. 7 root root 4096 12月 13 23:21 186

drwxr-xr-x. 7 root root 4096 12月 13 23:20 187

drwxr-xr-x. 7 root root 4096 12月 13 23:21 188

drwxr-xr-x. 7 root root 4096 12月 13 23:21 189

drwxr-xr-x. 7 root root 4096 12月 13 23:21 190

drwxr-xr-x. 7 root root 4096 12月 13 23:21 192

drwxr-xr-x. 7 root root 4096 12月 13 23:21 193

drwxr-xr-x. 7 root root 4096 12月 13 23:21 194

drwxr-xr-x. 7 root root 4096 12月 13 23:21 195

drwxr-xr-x. 7 root root 4096 12月 13 23:20 196

drwxr-xr-x. 7 root root 4096 12月 13 23:21 197

drwxr-xr-x. 7 root root 4096 12月 13 23:21 27

drwxr-xr-x. 7 root root 4096 12月 13 23:21 28

drwxr-xr-x. 7 root root 4096 12月 13 23:20 29

drwxr-xr-x. 7 root root 4096 12月 13 23:21 3

drwxr-xr-x. 7 root root 4096 12月 13 23:21 40

drwxr-xr-x. 7 root root 4096 12月 13 23:21 41

drwxr-xr-x. 7 root root 4096 12月 13 23:20 47

drwxr-xr-x. 7 root root 4096 12月 13 23:21 51

drwxr-xr-x. 7 root root 4096 12月 13 23:21 52

drwxr-xr-x. 7 root root 4096 12月 13 23:21 53

drwxr-xr-x. 9 root root 4096 12月 13 23:21 56

drwxr-xr-x. 7 root root 4096 12月 13 23:21 57

drwxr-xr-x. 7 root root 4096 12月 13 23:21 58

drwxr-xr-x. 7 root root 4096 12月 13 23:21 59

drwxr-xr-x. 7 root root 4096 12月 13 23:21 60

drwxr-xr-x. 7 root root 4096 12月 13 23:21 61

drwxr-xr-x. 7 root root 4096 12月 13 23:20 62

drwxr-xr-x. 7 root root 4096 12月 13 23:21 63

drwxr-xr-x. 7 root root 4096 12月 13 23:21 64

drwxr-xr-x. 7 root root 4096 12月 13 23:20 65

drwxr-xr-x. 9 root root 4096 12月 13 23:21 66

drwxr-xr-x. 7 root root 4096 12月 13 23:21 67

drwxr-xr-x. 7 root root 4096 12月 13 23:20 68

drwxr-xr-x. 7 root root 4096 12月 13 23:21 69

drwxr-xr-x. 7 root root 4096 12月 13 23:20 70

drwxr-xr-x. 7 root root 4096 12月 13 23:21 71

drwxr-xr-x. 7 root root 4096 12月 13 23:21 72

drwxr-xr-x. 7 root root 4096 12月 13 23:20 73

drwxr-xr-x. 7 root root 4096 12月 13 23:21 74

drwxr-xr-x. 7 root root 4096 12月 13 23:21 75

drwxr-xr-x. 7 root root 4096 12月 13 23:21 81

drwxr-xr-x. 7 root root 4096 12月 13 23:21 82

drwxr-xr-x. 7 root root 4096 12月 13 23:21 83

drwxr-xr-x. 7 root root 4096 12月 13 23:20 84

drwxr-xr-x. 7 root root 4096 12月 13 23:21 85

drwxr-xr-x. 7 root root 4096 12月 13 23:21 86

drwxr-xr-x. 7 root root 4096 12月 13 23:21 87

drwxr-xr-x. 7 root root 4096 12月 13 23:20 88

drwxr-xr-x. 7 root root 4096 12月 13 23:20 89

drwxr-xr-x. 7 root root 4096 12月 13 23:21 90

drwxr-xr-x. 7 root root 4096 12月 13 23:21 91

drwxr-xr-x. 7 root root 4096 12月 13 23:21 92

drwxr-xr-x. 7 root root 4096 12月 13 23:21 93

drwxr-xr-x. 7 root root 4096 12月 13 23:20 94

drwxr-xr-x. 7 root root 4096 12月 13 23:20 98

drwxr-xr-x. 7 root root 4096 12月 13 23:21 99

[root@localhost repositories]#

b 查找哪个repository包含上述报错的“22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc”关键字

[root@localhost repositories]# find  ./ |xargs grep -ri “22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc”

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

[root@localhost repositories]#

 

c 执行git fsck

[root@localhost repositories]# cd 66

[root@localhost 66]# git fsck

检查对象目录中: 100% (256/256), 完成.

error: object file ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e is empty

error: object file ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e is empty

fatal: loose object 1ad1162a6381f39960d7efb38aee8e989965489e (stored in ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e) is corrupt

[root@localhost 66]#

d 然后到控制台,依然报错(此步骤非必须):

 

e 删除包含关键字为66的repository:

[root@localhost repositories]# rm -rf 66

[root@localhost repositories]#

f 最后到控制台上删除包含错误的repository以及其工程project。

删除之后,之前报错的repository不再出现。

三 小结解决思路

1在Git服务器上创建新的项目和对应的repository;

2 手工把本地源码push到该新建的项目下;

3 删除出错的旧工程及其所有的repository;

4 删除出错,可以到Git服务器的BITBUCKET_HOME,/data/atlassian/application-data/bitbucke/shared/data/repositories子目录下,通过将包含错误信息的repository手工删除来处理。