我不知道这台电脑有什么问题,但我关闭了它,半小时后我启动它,做git status -uno,它告诉我其中一个子模块“不是”什么东西。然后我意识到.git/submodules dir是空的。然后我从其他地方复制这些文件,git status -uno给了我一堆无关的更改(一个.txt文件突然变成了一个目录?)。然后我试着git pull,它给了我一吨
error: file .git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack is not a GIT packfile
warning: packfile .git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack cannot be accessed..。但拉力完成了。现在我的状态仍然有一些不相关的变化,但是我尝试了git fsck --full,我得到了:
$ git fsck --full
Checking object directories: 100% (256/256), done.
error: file .git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack is not a GIT packfile
fatal: packfile .git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack cannot be accessed是否有任何方法可以恢复此回购,以便当前未检查的文件仍然在那里?(在更大的范围内,我仍然需要一些日志,但不应该签入)。我本希望git pull能恢复它,但很明显它没有.
编辑,在同一回购文件的另一个本地副本上找到这些包文件,但是现在发生了这样的情况:
cp -av /second/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38* /first/myrepo/.git/objects/pack/
‘/second/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.idx’ -> ‘/first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.idx’
cp: cannot create regular file ‘/first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.idx’: Permission denied
‘/second/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack’ -> ‘/first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack’
cp: cannot create regular file ‘/first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack’: Permission denied但是为什么我被拒绝了,我是那些文件的所有者?
$ ls -la /first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38*
-r--r--r-- 1 MYUSER MYUSER 214656 Aug 18 11:05 /first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.idx
-r--r--r-- 1 MYUSER MYUSER 111503621 Aug 18 11:05 /first/myrepo/.git/objects/pack/pack-65f501f2463a843b574db1ac1bde89b44e9acf38.pack仅仅拥有rrr的权限就不会有什么不同了,对吧?!(虽然它们似乎已被复制,但文件大小似乎是正确的).
发布于 2016-08-25 12:19:11
我会在其他地方复制新的存储库,然后将工作文件复制到新的克隆中。这样,您就可以在新回购上编写未经检查的更改,并可以提交它。我也会跳过.git和其他回购特定的文件。
发布于 2016-08-25 12:31:57
好的,这就是我所做的--在上面的.pack文件的奇怪副本之后,我做了:
$ git fsck --full
Checking object directories: 100% (256/256), done.
Checking objects: 100% (15506/15506), done.
dangling blob 35603bdc2deb1bbe87014c0fa7564f2ff077d2e8
dangling blob a2e54f6f31b87bbbe16a630cb4a938f597f07da1
dangling blob 60a6b39cd196dcd09e7b2246f3f2d9d2b0c12716
dangling blob 5a667c801bc4386b6c86c98f61f82df0399da3ca
dangling blob 16b0e85eaf256a4f0a2aeb7532929077fef92737
dangling blob 827a7209620a031935539e1a70ddb005edc52bfb..。这意味着它通过得很好,但是git status -uno仍然显示了太多的“未进行提交的更改.”,所以我做了@TimBiegeleisen建议的事情:
git reset --hard HEAD~2
git status -uno # now only minimal "Changes not staged for commit"
git pull # went back to current HEAD
git fsck --full # same as above
git status -uno # same as above..。事实上,git reset没有丢失我的未跟踪日志文件,这很好。所以我想,回购现在大部分都恢复了-谢谢大家!
https://stackoverflow.com/questions/39144977
复制相似问题