背景
有些配置需要更新上線,程式碼在new-dev
, 然後在stable
分支上面cherry-pick
new-dev
分支上的commit id
然後 git push
程式碼到伺服器上面,此時正好停電了。過了不久,恢復供電。
此時執行命令git status
fatal: Not a git repository (or any of the parent directories): .git
複製程式碼
什麼,不是git倉庫,通常想到的就是.git檔案找不到,不可能啊
ls -la .git
複製程式碼
total 1237
drwxr-xr-x 1 Administrator 197121 0 Jun 22 15:28 .
drwxr-xr-x 1 Administrator 197121 0 Jun 22 15:28 ..
-rw-r--r-- 1 Administrator 197121 45 Jun 22 15:28 COMMIT_EDITMSG
-rw-r--r-- 1 Administrator 197121 1416 Jun 22 15:28 FETCH_HEAD
-rw-r--r-- 1 Administrator 197121 23 Jun 22 15:28 HEAD
-rw-r--r-- 1 Administrator 197121 41 Jun 22 15:28 ORIG_HEAD
-rw-r--r-- 1 Administrator 197121 580 Jun 11 17:12 config
-rw-r--r-- 1 Administrator 197121 73 Jun 4 18:04 description
drwxr-xr-x 1 Administrator 197121 0 Jun 4 18:04 hooks
-rw-r--r-- 1 Administrator 197121 1220081 Jun 22 15:28 index
drwxr-xr-x 1 Administrator 197121 0 Jun 4 18:04 info
drwxr-xr-x 1 Administrator 197121 0 Jun 4 18:04 logs
drwxr-xr-x 1 Administrator 197121 0 Jun 22 15:28 objects
-rw-r--r-- 1 Administrator 197121 7708 Jun 4 18:04 packed-refs
drwxr-xr-x 1 Administrator 197121 0 Jun 22 16:26 refs
複製程式碼
於是偷個懶,懶得修復了,直接git clone
一個新的專案,然後發現stable
分支已經找不到了。這下我就慌了,還好昨天有人修改上線,
之後也沒有人修改程式碼,有最新的tag。按照如下操作,發現程式碼提交不上去,於是搜尋了一下reference broken
[1],說是伺服器檔案有損壞,
refs/heads/statble
中的commit id為空或者亂碼。
於是找來運維大哥上gitlab伺服器上面看看,果然,resf/heads/stable
中的commit id,為空,然後我到本地的同級目錄下看看這個檔案
裡的位元組全是0。從tag把最新的commit id寫入這個檔案,然後stable分支就出現了。
root@ubuntu:/mnt/api-xxx# git checkout xxx-release-5.0.4.201806211050
root@ubuntu:/mnt/api-xxx# git checkout -b stable
root@ubuntu:/mnt/api-xxx# git push --set-upstream origin stable
Total 0 (delta 0), reused 0 (delta 0)
remote: error: cannot lock ref 'refs/heads/stable': unable to resolve reference 'refs/heads/stable': reference broken
To gitlab.xxx.tv:xxx/api.git
! [remote rejected] stable -> stable (failed to update ref)
error: failed to push some refs to 'git@gitlab.xxx.tv:xxx/api.git'
複製程式碼
總結
定時備份資料(不侷限在這個專案上面,這個有tag),斷電這種不可抵抗力因素,如果遇到了,可能一下午還要加班在填坑
到最後我我還在yy,是我push這個commit導致gitlab負載過高,然後斷電了