什麼是創建損壞的git倉庫的一些方法?有沒有辦法永久損壞一個git倉庫?你可以癱瘓一個git存儲庫,這樣它的行爲有點正常,但做了奇怪的事情?如何損壞Git存儲庫?
我的興趣來自於有人擔心自己是否真的創造了不可恢復的狀態。通常事情很容易解決或者至少拼湊在一起。有沒有隱藏(邪惡)在Git寶石?
什麼是創建損壞的git倉庫的一些方法?有沒有辦法永久損壞一個git倉庫?你可以癱瘓一個git存儲庫,這樣它的行爲有點正常,但做了奇怪的事情?如何損壞Git存儲庫?
我的興趣來自於有人擔心自己是否真的創造了不可恢復的狀態。通常事情很容易解決或者至少拼湊在一起。有沒有隱藏(邪惡)在Git寶石?
那麼,可能發生的最直接的腐敗是在.git/objects
目錄內丟失數據或數據完整性。由於它被設計成一個不可變的只寫存儲機制,所以一旦違反了這個假設,很多其他的東西就會崩潰。比如說,最常見的情況是網絡傳輸中的包文件被破壞。除非你非常(看過:天文數字)不吉利,但git會把這當作是理所當然的事,並大聲抱怨。爲了以這種方式獲得沉默的失敗,你需要破壞一個blob,以便保留它的SHA1哈希......在deflate壓縮下......使用精確的類型和大小的頭文件。
因此,git非常擅長驗證自己的數據完整性。我們還能做什麼?要真正使國家不可恢復,您需要:
.git/refs
下任何指定ref或引用日誌任何可達);然後否則,您將始終能夠運行git checkout <sha> && git branch recovered
,並無論您做了什麼其他操作,都可以恢復所有工作。在基礎git使用過程中,如果您使用rebase,cherry-pick或filter-branch創建新的提交對象,或者如果您在分支上創建新的提交對象,則提交會像這樣孤立。默認情況下,您的寬限期爲about two weeks,然後,儘管您可以總是截斷您的reflog並手動修剪,以便儘早排除某些內容。
更爲常見的是,當用戶從不將數據添加到git中時,我看到數據丟失。例如,新用戶有時會經常猶豫不決,並嘗試使用帶有髒工作副本的命令。如果你從來沒有在git中記錄過狀態,那麼git無法爲你帶回來!
如果您能夠接受可恢復但難以通知詐騙,你可以做一些邪惡與git replace或graft points愚弄混帳到與合併或過濾分支操作的假歷史操作。儘管如此,被替換的提交仍然算是可達的,所以它不會是永久性的損害。
*新用戶有時經常猶豫不決*我一直告訴人們提交是免費的。 –
@ ta.speot.is:這是一個很難做的心理調整!我通常試圖將它作爲git呈現,它有兩個獨立的動作:「提交」用於記錄狀態,「推」用於共享狀態。即使人們理性地理解,習慣也是最難改變的事情。 –
挑選100個隨機8位數字。在'.git'的每個文件中每個字節隨機地隨機取一個。忘記隨機數字。 –
我似乎還記得我遇到了一個問題,我把它放到了一個Dropbox文件夾中--Git試圖寫入Dropbox當前正在上傳的文件中的競爭條件。不知道它們的性質是什麼,它是一種非明顯的腐敗還是隻是失敗的提交,但你可以研究它。 – millimoose
第一步:不要使用ECC內存。第二步: ???。 http://www.mail-archive.com/[email protected]/msg37928.html –