一些時候由于開發初期經驗不足和貪圖方便, 會把一些不應該提交到 Git 的檔案上傳到 Github, 帶來一系列安全問題, 更有可能是把一些大檔案上傳到 GitHub 上, 導致專案非常臃腫, 每次 pull、push 都要花費很多時間.
超 100000 個 GitHub 代碼庫泄露了 API 或加密密鑰
關于如何更好的管理大檔案, 可以閱讀 更好的在 Git 專案中保存大檔案(Git LFS 的使用) - 質子 - 博客園 .
這時候就可以尋求一些特殊的工具的幫助, BFG Repo-Cleaner by rtyley 就是這樣一款工具, 可以從 Git 專案中徹底洗掉某一個檔案的歷史記錄.
下載及運行
BFG Repo-Cleaner 是由 Scala (一種JVM語言) 寫成, 所以會被編譯成 jar 包, 下載非常方便, 下載地址可在官網或直接點擊 bfg 下載地址 .
但因此運行 bfg.jar 就需要 Java 環境, 關于 Java 環境的安裝, macOS可以參考 macOS 的 JDK 安裝問題 , 而 Windows 已經有很多人提過, 不做贅述.
讓它完全消失
首先需要自行從專案中洗掉不想要的檔案并提交, 這樣能最大程度避免誤刪、誤操作.
## 首先需要自行從專案中洗掉不想要的檔案
rm file-to-delete
## 提交改動, 即最新分支是不包含要被洗掉的檔案
git commit -m "洗掉 file-to-delete"
git push
然后使用 --mirror 命令裸克隆(clone)整個專案.
git clone --mirror [email protected]:username/some-project.git
## 根據經驗, 如果是包含大檔案的專案, 使用 ssh 將會克隆的非常緩慢, 可以改用 https
git clone --mirror https://github.com/username/some-project.git
## 這個時候, 你的當前目錄下就會產生一個名為 some-project.git 的檔案夾
接著開始洗掉檔案歷史.
## 根據情況的不同, bfg 可選擇根據檔案大小洗掉
java -jar bfg.jar --strip-blobs-bigger-than 100M some-project.git
## 根據情況的不同, bfg 可選擇直接根據名字洗掉
java -jar bfg.jar --delete-files name-of-file some-project.git
任選以上命令執行其中一個后, 執行 git gc 真正洗掉這些檔案并提交.
cd some-project.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
這時候那個檔案就會消失了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/3060.html
標籤:其他
上一篇:Windows下Git的使用
