簡體   English   中英

恢復 git 存儲庫/提交等

[英]Restore git repository/commits etc

我不小心刪除了一個包含 a.git/ 的項目。 只有這個本地存儲庫。

我使用recuva恢復了許多文件,項目在那里恢復。 但是.git-things 沒有回來,因為我只有一個包含所有文件的文件夾: http://pastebin.com/sBiQ9fin我不知道把它們放在哪里。

是否可以將這些文件放回 a.git/ 文件夾中,以便我可以恢復項目的所有提交等?

你似乎不可能再恢復任何東西了。 為避免再次發生這種情況,我建議在各種代碼托管站點之一(github、gitorious、repo.or.cz)上設置一個 repo。 如果您需要,他們支持私人回購,有些是免費的,有些不是。

此外,磁盤備份是另一種保證代碼安全的方法。

如果您恢復了松散的 object 文件並且只有 38 個字符的名稱后綴,則很容易找回全名。 我寫了這個 Python 腳本:

import os
import hashlib
import sys

for name in sys.argv[1:]:
    with open(name) as obj:
        contents = obj.read().decode('zlib')
        sha1 = hashlib.sha1(contents).hexdigest()
        assert sha1[2:] == name
        path = sha1[:2]
        os.renames(name, '.git/objects/{0}/{1}'.format(path, name))

首先在包含所有對象的目錄中運行git init ,然后調用它

python recover.py ??????????????????????????????????????

然后,運行git fsck以驗證松散的 object 數據庫。 如果你成功了,它會告訴你哪些提交是懸空的,比如

josh@tengwar:~/test (master)$ git fsck 
notice: HEAD points to an unborn branch (master)
notice: No default references
dangling commit 0170886ebc339424aab2e1685a32a2de2ce62e13
dangling commit 6451cd01f1f76b224352f1d2d0fca12a21454c3e
dangling commit 1e13a551382e652fa07a108341516f0f4a441c9c
dangling tag 7914223b1bb0d0e9179027a00bc2f62e118483d4
dangling tag 2895de51d79904d707dfbf5bcd68b047e49c9f03
dangling commit 8156f571839e5f42d043dcb6bd91aa406e909f76
dangling commit 75b7d8d60344b576b19cc7908d180757d50274c3
dangling tag 9aed839bbc4e3c5cd031d73b78ea87b43688e34c
dangling commit 69fe3581a8b06266c294d72e5944e2415d5af612

然后,您可以使用git checkout <id> -b newbranch創建指向任何提交的分支,一切都會好起來的。 (如果git fsck報告缺少對象,事情會很困難。)

如果這就是你所擁有的一切,那是不可能的。 這些不是完整的 sha 地址(38 個字符而不是 40 個),因為前兩個字符是這些對象所屬的目錄名稱。

除非你有別的東西。

暫無
暫無

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

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