2012-04-06 34 views
2

我有一個工作目錄是git存儲庫。今天,我改變了很多文件夾和文件結構,並且還將.git目錄移動了一下。現在,試圖提交這些更改,我收到以下錯誤:修復不完整.git目錄

fatal: Not a git repository (or any parent up to mount parent) 

我一派錯誤和發現的標準Git使用來確定當前目錄是一個Git倉庫。事實證明,我的.git缺少一些文件和文件夾:

$ ls -la .git 
total 36 
drwxr-xr-x 5 oli oli 4096 Apr 6 10:51 . 
drwxr-xr-x 10 oli oli 4096 Apr 6 11:05 .. 
-rw-r-xr-- 1 oli oli 30 Mar 3 13:39 COMMIT_EDITMSG 
-rw-r--r-- 1 oli oli 41 Mar 3 13:40 ORIG_HEAD 
-rw-r--r-- 1 oli oli 6612 Mar 3 13:40 index 
drwxr-xr-x 2 oli oli 4096 Jan 27 19:58 info 
drwxr-xr-x 3 oli oli 4096 Jan 27 19:58 logs 
drwxr-xr-x 165 oli oli 4096 Mar 3 13:40 objects 

相比另一個倉庫,有多個對象失蹤,最重要的是HEAD文件。我不完全知道,他們是如何迷路的(我總是移動整個目錄),但現在的問題是,如何恢復一切,以便我仍然擁有提交日誌並可以將更改提交到存儲庫。

回答

2

不知道這是否可行,但試試這個(做備份後)。我希望.git/objects的文件沒有丟失 - 否則我懷疑任何事情都會有幫助。

  1. git init
  2. 複製你不完整資料庫在它上面創建一個空倉庫,覆蓋了空庫也有過任何文件。

如果現在是公認的Git倉庫,但一些提交缺少,這樣做:

  1. git fsck --lost-found
  2. 移動.git/lost-found/commit目錄下.git/refs/heads
  3. 檢查歷史與gitk --all和創建分支或任何你想保存的標籤。
  4. 最後清理:將保存的分支推送到遠程存儲庫或從.git/refs/heads中刪除丟失和找到的分支。

然後下次記住通過推送到遠程存儲庫或使用自動備份應用程序進行備份。 ;)

+0

感謝您的幫助。我設法通過將其複製到不同的文件夾並將缺失的文件複製到我的回購庫,從遠程回購中恢復它。承諾工作,現在一切都很好。 – janoliver 2012-04-06 11:29:29