從git中永久刪除檔案以節省空間
在使用版本管理工具的過程中我們會碰到這樣的問題:不小心把一個不該加入版本管理的檔案加進去了,有時候這個檔案很大,也許我們整個版本庫才幾百 K,但加進去這個沒用的檔案卻有好幾百M,我可不想因為這麼個破爛東西把整個版本庫整個碩大無比,以後維護備份都不方便;還有時候是不小心把一個敏感檔案 加進去了,比如裡面寫了信用卡密碼的文字檔案。
這時候我們希望能把它從版本庫中永久刪除不留痕跡,不僅要讓它在版本歷史裡看不出來,還要把它佔用的空間也釋放出來。
在svn中的辦法是把整個版本庫dump出來filter一下再load回去。git中可以用下面的方法來實現:
我們先建立一個試驗用的版本庫,並往裡面提交一個10M的大檔案再刪除:
- $ mkdir t
- $ cd t
- $ git init
- Initialized empty Git repository in
- /Users/apple/t/.git/
- $ dd if=/dev/urandom of=testme.txt bs=10240 count=1024
- 1024+0 records in
- 1024+0 records out
- 10485760 bytes transferred in1.684808 secs (6223712 bytes/sec)
- $ git add testme.txt
- $ git commit -m "a"
- [master (root-commit)]: created 6fbb432: "a"
- 1 files changed, 0 insertions(+), 0 deletions(-)
- create mode 100644 testme.txt
- $ git rm testme.txt
- rm 'testme.txt'
- $ git commit -m r
- [master]: created bb38396: "r"
- 1 files changed, 0 insertions(+), 0 deletions(-)
- delete mode 100644 testme.txt
- $ du -hs
- 10M .
但我實在是不希望這麼一個空版本庫佔用我10M寶貴的硬碟空間,所以我要把它全刪掉,這就要用到git的filter-branch命令了。具體這個命令的用法可以看文件,下面是這個例子中的用法:
[python:nogutter] view plaincopy- $ git filter-branch --tree-filter 'rm -f testme.txt' HEAD
- Rewrite bb383961a2d13e12d92be5f5e5d37491a90dee66 (2/2)
- Ref 'refs/heads/master'
- was rewritten
- $ git ls-remote .
- 230b8d53e2a6d5669165eed55579b64dccd78d11 HEAD
- 230b8d53e2a6d5669165eed55579b64dccd78d11 refs/heads/master
- bb383961a2d13e12d92be5f5e5d37491a90dee66 refs/original/refs/heads/master
- $ git update-ref -d refs/original/refs/heads/master [bb383961a2d13e12d92be5f5e5d37491a90dee66]
- $ git ls-remote .
- 230b8d53e2a6d5669165eed55579b64dccd78d11 HEAD
- 230b8d53e2a6d5669165eed55579b64dccd78d11 refs/heads/master
- $ rm -rf .git/logs
- $ git reflog --all
- $ git prune
- $ git gc
- $ du -hs
- 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 如圖 現在是我們
從Git中clone的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