簡體   English   中英

從文件“不是GIT打包文件”中恢復Git存儲庫

[英]Recovering Git repo from file “is not a GIT packfile”

我不知道這台計算機可能出了什么問題,但是我關閉了它,半個小時后啟動了它,執行git status -uno ,它告訴我一個子模塊“不是”某種東西。 然后我意識到.git/submodules目錄為空。 然后,我從其他地方復制這些文件, 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可以恢復它,但是顯然不會...


編輯,在同一倉庫的另一個本地副本上找到這些packfile,但是現在發生了:

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權限就不會有所不同,對吧? (盡管它們似乎已被復制,但文件大小似乎正確)...

我會在其他地方進行存儲庫的新克隆,然后將工作文件復制到新克隆。 這樣,您將在新的倉庫中寫入未經檢查的更改並可以提交。 我也會跳過.git和其他回購專用文件。

好的,這就是我所做的-在完成上述.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不會丟失我的未跟蹤日志文件,這很好。 所以我想現在回購大部分已經恢復了-謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM