1. 程式人生 > >從git中永久刪除檔案以節省空間

從git中永久刪除檔案以節省空間

在使用版本管理工具的過程中我們會碰到這樣的問題:不小心把一個不該加入版本管理的檔案加進去了,有時候這個檔案很大,也許我們整個版本庫才幾百 K,但加進去這個沒用的檔案卻有好幾百M,我可不想因為這麼個破爛東西把整個版本庫整個碩大無比,以後維護備份都不方便;還有時候是不小心把一個敏感檔案 加進去了,比如裡面寫了信用卡密碼的文字檔案。

這時候我們希望能把它從版本庫中永久刪除不留痕跡,不僅要讓它在版本歷史裡看不出來,還要把它佔用的空間也釋放出來。

在svn中的辦法是把整個版本庫dump出來filter一下再load回去。git中可以用下面的方法來實現:

我們先建立一個試驗用的版本庫,並往裡面提交一個10M的大檔案再刪除:

[python:nogutter] view plaincopy
  1. $ mkdir t  
  2. $ cd t  
  3. $ git init  
  4. Initialized empty Git repository in
  5.  /Users/apple/t/.git/  
  6. $ dd if=/dev/urandom of=testme.txt bs=10240 count=1024
  7. 1024+0 records in
  8. 1024+0 records out  
  9. 10485760 bytes transferred in1.684808 secs (6223712 bytes/sec)  
  10. $ git add testme.txt  
  11. $ git commit -m "a"
  12. [master (root-commit)]: created 6fbb432"a"
  13.  1 files changed, 0 insertions(+), 0 deletions(-)  
  14.  create mode 100644 testme.txt  
  15. $ git rm testme.txt  
  16. rm 'testme.txt'
  17. $ git commit -m r  
  18. [master]: created bb38396: "r"
  19.  1 files changed, 0 insertions(+), 0 deletions(-)  
  20.  delete mode 100644 testme.txt  
這時候我們看看版本庫的大小: [python:nogutter]
view plaincopy
  1. $ du -hs  
  2.  10M    .  
很明顯雖然testme.txt已經被刪除了,但是因為版本歷史裡曾經有過這個檔案,所以git仍然把它存在庫中,以後可以通過它再把它恢復回來。

但我實在是不希望這麼一個空版本庫佔用我10M寶貴的硬碟空間,所以我要把它全刪掉,這就要用到git的filter-branch命令了。具體這個命令的用法可以看文件,下面是這個例子中的用法:

[python:nogutter] view plaincopy
  1. $ git filter-branch --tree-filter 'rm -f testme.txt' HEAD  
  2. Rewrite bb383961a2d13e12d92be5f5e5d37491a90dee66 (2/2)  
  3. Ref 'refs/heads/master'
  4.  was rewritten  
  5. $ git ls-remote .  
  6. 230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD  
  7. 230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master  
  8. bb383961a2d13e12d92be5f5e5d37491a90dee66        refs/original/refs/heads/master  
  9. $ git update-ref -d refs/original/refs/heads/master [bb383961a2d13e12d92be5f5e5d37491a90dee66]  
  10. $ git ls-remote .  
  11. 230b8d53e2a6d5669165eed55579b64dccd78d11        HEAD  
  12. 230b8d53e2a6d5669165eed55579b64dccd78d11        refs/heads/master  
  13. $ rm -rf .git/logs  
  14. $ git reflog --all  
  15. $ git prune  
  16. $ git gc  
  17. $ du -hs  
  18.  84K    .  

OK,這個檔案已經完完全全刪掉了,版本庫已經不再佔用空間了。

相關推薦

git永久刪除檔案節省空間

在使用版本管理工具的過程中我們會碰到這樣的問題:不小心把一個不該加入版本管理的檔案加進去了,有時候這個檔案很大,也許我們整個版本庫才幾百 K,但加進去這個沒用的檔案卻有好幾百M,我可不想因為這麼個破爛東西把整個版本庫整個碩大無比,以後維護備份都不方便;還有時候是不小心把一

Git如何永久刪除檔案(包括歷史記錄)

有些時候不小心上傳了一些敏感檔案(例如密碼), 或者不想上傳的檔案(沒及時或忘了加到.gitignore裡的), 而且上傳的檔案又特別大的時候, 這將導致別人clone你的程式碼或下載zip包的時候也必須更新或下載這些無用的檔案, 因此, 我們需要一個方法, 永久的刪除這些檔案(包括該檔案的歷史記錄).

Git如何永久刪除檔案(包括歷史記錄)(轉載)

轉自:https://www.cnblogs.com/shines77/p/3460274.html有些時候不小心上傳了一些敏感檔案(例如密碼), 或者不想上傳的檔案(沒及時或忘了加到.gitignore裡的),而且上傳的檔案又特別大的時候, 這將導致別人clone你的程式碼

Git如何永久刪除檔案

摘要: $ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filte

Git永久刪除檔案(包括歷史記錄)

有些時候不小心上傳了一些敏感檔案(例如密碼), 或者不想上傳的檔案(沒及時或忘了加到.gitignore裡的), 而且上傳的檔案又特別大的時候, 這將導致別人clone你的程式碼或下載zip包的時候也必須更新或下載這些無用的檔案, 因此, 我們需要一個方法,

Git 永久刪除檔案

簡略版 假設要刪除的檔案是password.txt,執行如下命令: git filter-branch --force --index-filter 'git \ rm --cached --ignore-unmatch password.txt' \ --

git手動刪除檔案如何在git刪除

在日常開發中,我們可能或手動刪除(delete鍵刪除的)一些檔案,然而我們本來應該是用git rm fileName命令刪除的,但是現在我們手動刪除了,那麼要如何在git裡面講那些手動刪除的檔案刪除呢? 我們這裡有兩種方法可以在git中刪除那些手動刪除(delete鍵刪

【轉帖】 Windows解決刪除檔案時提示被程序佔用的問題

原文連結是:https://blog.csdn.net/caodinke/article/details/45101119 應用背景:   windows作業系統中,有時我們關閉程式後,一些相關的程序仍在後臺執行,並訪問著一些檔案,使得我們無法對這些檔案及其所屬的資料夾進行刪除、重新命名等操

mzy git學習,刪除檔案(三)

刪除一個檔案(工作區刪除,並且在本地版本庫中也刪除) 第一種方式: rm test.txt 先刪除工作區的test.txt git add test.txt (我的理解是,將刪除test.txt這個動作add上去,告訴本地版本庫) git commit -m “刪除了test

git忽略.DS_Store檔案

蘋果系統,在你沒有遮蔽了.DS_Store ,每次開啟檔案就會生產.DS_Store,這樣讓我們很頭疼:我們如何遮蔽.DS_Store呢? 我們用svn的時候 ,在我們最開始提交的時候,會發現.a檔案,提不上去;我們去配置一下,將.a去掉後就可以,例如Cornerstone 如圖 現在是我們

Gitclone的java程式的漢字註釋,為什麼在Eclipse開啟是亂碼?

如下圖所示: 從git中clone下來的java程式,在Eclipse中開啟時漢子變成了亂碼,經研究發現,Eclipse預設編碼居然是GBK,js檔案預設編碼是ISO-.. 修改成UTF-8的方法如下: 1、windows->Preferences...開啟"首選項"對話

git更新和刪除檔案程式碼

一般步驟: git add 檔名字或者git add . git commit -m '描述資訊' git pull origin master(你自己的分支) git push -u origin master 如果過程中出現‘please enter a commit messa

活動目錄 powershell 新增\刪除 使用者

某組織的ou中的賬戶可能經常需要移動,每個部門ou都有部門組,以dep_開頭,如果賬號從ou1移動到ou2,則賬號需要從ou1中的部門組中刪除,同時,要新增到ou2的部門組中,指令碼如下: $ConfirmPreference="none"   #關閉confirm確認提示

C#伺服器下載execl檔案到本地

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong> string pat

Linux刪除檔案,磁碟空間未釋放問題追蹤

    在客戶使用我們產品後,發現一個問題:在刪除了檔案後,磁碟空間卻沒有釋放。是有程序在開啟這個檔案,還是其他情況?我們一起來看看一下兩個場景 一. 場景一:程序開啟此檔案     當一個檔案正在被一個程序使用時,使用者刪除此檔案,檔案只會從目錄結構中刪除,但並沒有從磁

windows無法刪除檔案,報"無法刪除****,找不到指定檔案,請確定指定的路徑及檔名是否正確"的解決

1.啟用一個cmd 2.到要刪除的檔案(夾)的讓一層目錄下 3.執行命令:dir /x,然後幾下要刪除的檔案(夾)對應行的第三列(記作 MARK) 4.如果是檔案,輸入:del "$MARK"(就是剛才記得東西),是資料夾就輸入:rd "$MARK" 5.大功告成

是用JDBC資料庫獲取資料並java物件返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys為主鍵,引數順序和表中保持一致 如果id, name

Git 忽略某些檔案或者資料夾

有些時候,你必須把某些檔案放到Git工作目錄中,但又不能提交它們,比如儲存了資料庫密碼的配置檔案啦,等等,每次git status都會顯示“Untracked files …”,有強迫症的童鞋心裡肯定不爽。 好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在Git工作區的根目錄下建立一個特殊的

如何DLL生成LIB檔案

如何從dll檔案匯出對應的lib檔案?         Visual   C++   開發工具提供了兩個命令列工具,一個是dumpbin.exe,另一個是lib.exe。利用這兩個工具即可從dll匯出其對應的lib。         1、在命令列執行:     dumpb

C#WInform DataTable匯出XML檔案

private bool ExportXML(string filepath) { bool flag = true; try