2013-06-20 24 views
1

我確定我刪除了這個文件,但它仍然顯示在verify-pack中。是什麼賦予了?大對象在刪除後出現在git pack中

$ git的驗證包-v 的.git /對象/包/包,5722438014fe04ec9d559810bd7840afb6006858.idx | sort -k 3 -n |尾-3

bfafbf4c4cd9a5ddbcb637a09c183c6dabe7acde BLOB 18960384 1061775 9232588 ec890d28afb338b258727f124e0bfbc11f6c0f0d BLOB 23079936 2279611 1640818 5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e BLOB 79966293 3803212 4919563

$ git的轉速名單--objects --all | grep的5daf9ca1
5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e的DriverLib/json_spirit /調試/ json_spirit_reader.obj

$ git的日誌--pretty = ONELINE --branches - 的DriverLib/json_spirit /登場/ json_spirit_reader.obj

當我運行git log來找出對象在哪個提交中,沒有任何顯示。是什麼賦予了?

回答

0

刪除文件只是記錄一個新的提交不引用文件;包含文件(實際上是存儲庫中的任何其他提交)的此分支上的所有先前提交可能仍然引用文件的blob對象,因此文件的內容不會離開存儲庫。

如果你需要徹底刪除從庫中的文件(即從過去的版本一樣),你需要使用git filter-branch。請注意,此工具實際上會重寫提交,因此在嘗試重寫使用它的分支之前,它是一個銳利的工具—,請確保爲該分支重新編寫分支的原始尖端— git branchgit tag

另一個可能的原因是,該文件還引用一些經過the reflog提交訪問。如果是這樣,則要麼過期推薦日誌或手動刪除不需要的條目並運行git gc --aggressive

+0

對不起,我沒有給你完整的細節。我在做了git filter-branch --index-filter之後得到了這些結果。我現在的想法是,我可能需要做 - 樹 - 過濾呢? – moesef