使用BFG清除git倉庫中的隱私文件或大文件


使用git時間不長,在調機械臂項目的時候,由於對TwinCAT3和vs的機制不太了解,沒有添加很好的忽略文件(.gitignore)。造成git倉庫包含了很多沒有用的文件,例如vs的sdf文件,TwinCAT3的PLC編譯文件等等。當時急着趕項目結題也沒有考慮特別多,抱着能用就行的心態。現在項目結題初期的檢測工作已經完成,回來填之前留下的坑。

通過查找資料,看到可以通過BFG工具來清理git倉庫。在GitHub的幫助頁面中也推薦了這個工具。官網說是比git-filter-branch工具快10-720倍。這里根據我的使用,介紹一下這個工具。

這個工具的官網:https://rtyley.github.io/bfg-repo-cleaner/

這是一個Java程序,使用的話需要安裝Java運行環境

使用方法:

主要是將官網的流程用中文來寫一下。其中的倉庫以我本人的機械臂代碼倉庫為例子。使用起來很簡單,快捷。

1.下載官網的程序包。例如我這里下載的為bfg-1.13.0.jar,之后將程序包放到一個文件夾里,為了方便,重命名為bfg.jar。

2.clone自己的git repo,使用--mirror參數。

git clone --mirror git@github.com:huipengly/RobotArm.git

3.清除大文件,文件夾,隱私文件

這里官網給出的命令是這樣的。第一句是刪除文件,第二句是刪除文件夾,兩個語句的區別在附加參數上。這里,不指定文件/文件夾位置,只是用名稱匹配。

java -jar bfg.jar --delete-files RobotArm.sdf RobotArm.git
java -jar bfg.jar --delete-folders _Boot RobotArm.git

這樣會有一個問題,這種情況bfg會保護當前版本(HEAD所指的版本),不去清理。提示如下。

Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit ******* (protected by 'HEAD')

如果說當前版本已經沒有問題,那么這么使用沒有問題。

但是我的當前版本也是有需要刪除的文件的,在谷歌搜索了一下,找到了解決方法。

在命令行下加入--no-blob-protection命令,可以解除保護。我使用的命令如下。

java -jar bfg.jar --delete-files RobotArm.sdf RobotArm.git --no-blob-protection
java -jar bfg.jar --delete-folders _Boot RobotArm.git --no-blob-protection

 4.清理不需要的數據

在完成上面的指令后,實際上這些數據/文件並沒有被直接刪除,這時候需要使用git gc指令來清除。

cd RobotArm.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

5.推送到GitHub

最后,更新完本地倉庫后,將數據推送到GitHub遠程倉庫。按照官網描述,由於之前使用了--mirror參數,推送時會推送所有內容。

git push

參考:

1.Removing sensitive data from a repository

2.BFG Repo-Cleaner

3.How to remove a protected commit using BFG


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM