我不知道这台计算机有什么问题,但是我关了它,半小时后我启动它,做git status -uno
,它告诉我一个子模块“不是”某种东西。然后我意识到.git/submodules
dir是空的。然后我从其他地方复制那些,git status -uno
给了我一堆无关的更改(一个.txt文件突然变成了一个目录?)。然后我尝试git pull
,它给我一吨从文件中恢复Git回购“不是GIT packfile”
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
应该没有区别吧?! (虽然它似乎已被复制,文件大小看起来是正确的)...
你有没有工作在当地尚未承诺和推动?如果我处于这种情况,我可能会选择回滚到之前的提交,并从回购中拉出新的。 –
@TimBiegeleisen - 不,我没有未提交的更改,但我确实有未跟踪的日志文件,我不想丢失。你会建议什么命令来回滚,'git checkout HEAD〜1;混帐拉'? – sdaau
未跟踪的文件应该没问题(我认为...)。你可以尝试'git reset --hard HEAD〜N',其中'N'是提交的提交数量。如果您确定遥控器具有所有这些信息,请尝试此操作。如果您确定,然后及时向后跳,然后再次尝试拉。 –