2012-04-06 55 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