2016-04-17 33 views
0

上漲太晚了,昨晚上我從別人那兒繼承了一些遺留代碼工作。除了把東西放在版本控制之外,我想將代碼庫從標籤轉換爲空格。最後用我的工作目錄中的兩個空格替換所有制表符。遞歸。包括.git目錄。我做了一些改變並付諸實踐,但還沒有在其他地方推動回購。替換/ t /與/ /在git倉庫

如果我只需要重新開始回購和將更改壓縮到一個提交中,這不是一個巨大的損失,但是假設我要付出努力,這種情況有多可恢復?

在某種程度上,我很高興我犯了這個錯誤之前,我得到的太遠,但假設這是一個長達數年的項目的唯一副本,怎麼擰,你會是什麼?

+0

主要trickiness是,現在有沒有簡單的方法來告訴什麼最初是兩個空格,什麼本來是一個標籤。您可能只是重新創建存儲庫。 (希望在一個長達數年的項目的情況下,會有另一個遠程的地方,你可以重新克隆。) – Amber

回答

1

遞歸。包括.git目錄 首先,您需要驗證您的.git文件夾沒有「損壞」。

# Verify that the .git folder and all the objects are still usable 
git fsck --full 

如果你沒有看到和晃來晃去的數據一切都OK。

,但沒有推動回購其他地方尚未

你仍然可以恢復所有,即使你推以前的數據(除非你做了強制推送)


從某種意義上說,我很高興我在犯了太多錯誤之前犯了這個錯誤,但假設這是一個長達數年的項目的唯一副本,那麼你會受到多大的影響?

如果你沒有備份,你會遇到很大的麻煩。它是一種可恢復的情況,但需要很多工作。


如何從此錯誤中恢復?

如果您已將所有選項卡替換爲空格,反之亦然,您將不得不嘗試再次替換它們,好處是git具有SHA-1,它是內容的sha1sum(內容本身已壓縮與格式內不應包含任何空格

短(它有點比這更復雜)的git計算SHA-1以下的內容,並壓縮它:

blob<space><content_lengt><null><content> 

然後git的壓縮如果你知道如何存儲文件,你可以嘗試恢復它們,但它的很多工作。那麼手裏就不應該有空格,所以你可能會搞砸內線(.git/object)的機率很小。

Summary

不要緊,你做什麼從未觸摸.git文件夾!


enter image description here

+0

所以它可能是某種過程,你會嘗試不同的組合改變//到/ \ t /,然後檢查sha1並在正確的時候繼續下一個文件?這聽起來很糟糕,但我很高興知道有這樣一種方式,如果它會出現這種情況。 :D – Monban

+0

是的,就是這樣,這就是爲什麼你必須小心翼翼。 – CodeWizard