使用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
參考: