2016-08-25 49 views
0

我不知道這臺計算機有什麼問題,但是我關了它,半小時後我啓動它,做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應該沒有區別吧?! (雖然它似乎已被複制,文件大小看起來是正確的)...

+1

你有沒有工作在當地尚未承諾和推動?如果我處於這種情況,我可能會選擇回滾到之前的提交,並從回購中拉出新的。 –

+0

@TimBiegeleisen - 不,我沒有未提交的更改,但我確實有未跟蹤的日誌文件,我不想丟失。你會建議什麼命令來回滾,'git checkout HEAD〜1;混帳拉'? – sdaau

+1

未跟蹤的文件應該沒問題(我認爲...)。你可以嘗試'git reset --hard HEAD〜N',其中'N'是提交的提交數量。如果您確定遙控器具有所有這些信息,請嘗試此操作。如果您確定,然後及時向後跳,然後再次嘗試拉。 –

回答

1

我會做其他地方的資源庫的新克隆,然後複製工作文件到新的克隆。通過這種方式,您可以在新的回購庫上編寫未經檢查的更改並可以提交。我會跳過.git和其他特定於repo的文件。

+0

感謝@Mateusz,會給你一個嘗試... – sdaau

0

好吧,這是我做的事 - 在.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沒有失去我的日誌文件未追蹤,這是很好的。所以我想,回購現在大部分已經恢復 - 謝謝大家!