看起來好看的腳本是不是git ls-files
? 有可能修復索引文件或從corupted索引文件中提取文件列表? 也許可能與正則表達式?最好在python 2.7.6如何工作git ls-files腳本
5
A
回答
3
根據腐敗的程度,這可能或可能不可行。 Git的數據結構和相關工具比修復它更適合檢測腐敗。
特別是,該指數本身不存儲庫的一部分,它是從當前內容導出,所以在大多數情況下,你可能會更好刪除它,做git reset
重新創建它。讀過你的問題的人可能想知道你的倉庫是如何進入這個狀態的。
考慮到這一點,這裏有一些想法:
的最後20個字節的指數是文件內容的SHA1到這一點。如果這些是腐敗的,你可以用十六進制編輯器覆蓋它們。
~$ python3
>>> data = open('.git/index', 'rb').read()
>>> data[-20:].hex()
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3'
>>> hashlib.sha1(data[:-20]).hexdigest()
'e211d8f60209ca8571c2acc73f9a24ef523b5fa3'
這可能會修復由大腦損壞的工具造成的簡單腐敗。
如果你真的想從一個完全損壞的索引文件中恢復任何你可以,你可能會想:
- 閱讀index-format.txt參考實現。
- 看libgit2中的
parse_index
例程。 - 查看索引文件導致的特定錯誤。
- 小心修補該例程,以保持數據不會崩潰。
另一種方法是使用strings實用程序,如果您只想查看文件名列表。你將失去相關的二進制信息(並且一些二進制信息將包含可打印的ASCII垃圾)。
+0
字符串不是很糟糕,但也很多垃圾 –
相關問題
- 1. python腳本如何工作?
- 2. git ruby腳本不工作「必須在工作樹中運行」
- 3. git remotes如何工作?
- 4. 如何防止腳本在另一個腳本工作時工作
- 5. 如何讓我的bash腳本工作?
- 6. 如何從腳本排除工作表
- 7. 登錄腳本,TIMEDIFF如何工作?
- 8. 如何使腳本正常工作?
- 9. Unix/shell腳本如何工作?
- 10. 如何使這個腳本工作
- 11. 這個AHK腳本如何工作?
- 12. Linux Expect腳本如何工作?
- 13. 如何使腳本在Ruby中工作?
- 14. GIT Push如何工作?
- 15. git-review如何工作?
- 16. git如何合併工作?
- 17. git-receive-pack如何工作?
- 18. Git工作副本到Eclipse
- 19. 腳本不工作
- 20. jQuery腳本工作
- 21. 使腳本#樣本工作?
- 22. git-svn:如何知道git-svn工作副本的當前SVN修訂版本?
- 23. 如何將Git添加到MSBuild腳本?
- 24. git克隆不工作在詹金斯外殼腳本
- 25. 用於文件轉換腳本的Git工作流
- 26. git的更新後的腳本不工作
- 27. 獲取git工作目錄根的腳本?
- 28. powershell腳本來顯示git信息,只是工作目錄
- 29. Groovy腳本(jenkins的工作流)嵌套git結賬
- 30. unix bash腳本導致git克隆不工作
你想找到你現有的'git-ls-files'二進制文件在哪裏?或者寫一個新的腳本來完成同樣的事情? _爲什麼_?這與你損壞的索引文件有什麼關係?哪個實際文件是 - '.git/index'?還有別的嗎? – Useless
是的,我需要寫一個新的腳本,做的事情與git-ls-files完全一樣,因爲我只需要從.git/index文件中提取文件列表(無論它是否損壞),而不檢查錯誤簽名,散列和別的東西只是原始文件列表沒有垃圾 –