BFG Repo-Cleaner: 在Git历史记录中清理不需要的数据
在处理 Git 项目时,可能会遇到一些敏感信息或者大文件被误上传到了仓库,这样会导致仓库变得庞大并且难以管理。这种情况下,BFG Repo-Cleaner 就派上用场了。它是一个更简单、更快速的工具,可以帮助我们从 Git 历史记录中删除不需要的数据。
BFG Repo-Cleaner 是什么?
BFG Repo-Cleaner 是一个由 Scala 编写的命令行工具,用于快速、精确地从 Git 仓库中删除不需要的数据。相比于 git-filter-branch
命令,BFG 的速度更快,使用也更简单。无论是大文件还是敏感数据,只需简单的命令,就能将其从所有提交历史中移除。
安装 BFG Repo-Cleaner
首先,需要在系统上安装 BFG Repo-Cleaner。以下是在 macOS 和 Ubuntu 以及 Windows 系统上的安装方法:
在 macOS 上安装
brew install bfg
在 Ubuntu 上安装
sudo apt-get install bfg-repo-cleaner
在 Windows 上安装
页可以在Windows上安装BFG Repo-Cleaner,但是需要先安装Java Runtime Environment (JRE),因为BFG Repo-Cleaner是用Scala写的,需要运行在JRE上。这里是具体步骤:
1. 安装Java Runtime Environment
可以从Oracle的官方网站下载最新版本的JRE:https://www.oracle.com/java/technologies/javase-jre8-downloads.html
需要注册oracle账号,有点麻烦,我的密码填的Qin********123#
这里有我的下载链接:https://download.csdn.net/download/Dontla/88617066
然后双击jdk-8u391-windows-x64.exe默认安装即可。
3. 确保计算机上已经安装了git
如果还没有安装,你可以从这里下载并安装:https://git-scm.com/download/win
4. 下载BFG Repo-Cleaner的jar文件
你可以从它的GitHub页面找到下载链接:https://github.com/rtyley/bfg-repo-cleaner
在这个地方下载jar:https://rtyley.github.io/bfg-repo-cleaner/
这里有我的下载链接:https://download.csdn.net/download/Dontla/88617154
5. 运行BFG Repo-Cleaner
打开命令提示符(cmd)或者PowerShell,然后使用以下命令运行BFG Repo-Cleaner:
java -jar bfg.jar
注意你需要把bfg.jar
替换成你下载的jar文件的实际路径。
通过以上步骤,你就可以在Windows上运行BFG Repo-Cleaner了。
注意,如果要停止BFG Repo-Cleaner,关掉控制台窗口即可。
清理 Git 历史记录
使用 BFG Repo-Cleaner 可以轻松地从 Git 历史记录中清理不需要的数据。下面是一些常见的清理操作。
删除大文件
Git 对大文件的处理效率并不高,因此,在仓库中保存大量大文件可能会影响其性能。以下是使用 BFG Repo-Cleaner 删除大文件的步骤:
-
克隆一个裸仓库:
git clone --mirror https://github.com/username/repo.git
-
使用 BFG 删除大于 100M 的文件:
bfg --strip-blobs-bigger-than 100M repo.git
注意,直接运行 bfg 这个命令在 Windows 上并不会工作,命令需要连起来使用,如:
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M kyai_3.0_tml.git
E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding>java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M kyai_3.0_tml.git Using repo : E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding\kyai_3.0_tml.git Scanning packfile for large blobs: 24977 Scanning packfile for large blobs completed in 4,265 ms. Found 41 blob ids for large blobs - biggest=1680050705 smallest=118199808 Total size (unpacked)=15999116602 Found 14691 objects to protect Found 3 commit-pointing refs : HEAD, refs/heads/kyai_tml_dev, refs/heads/master Protected commits ----------------- These are your protected commits, and so their contents will NOT be altered: * commit aa9fcf63 (protected by 'HEAD') - contains 4 dirty files : - kyai_one_button_deploy/shsany_ai/kyai_arm_ubuntu/kyai/ky/client/web/html/web/expressServer/public/upload/box_cjg_people_2.9.tgz (135.4 MB) - kyai_one_button_deploy/shsany_ai/kyai_x86_ubuntu/kyai_x86_ubuntu_20231113-163359.tgz (1.6 GB) - ... WARNING: The dirty content above may be removed from other commits, but as the *protected* commits still use it, it will STILL exist in your repository. Details of protected dirty content have been recorded here : E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding\kyai_3.0_tml.git.bfg-report\2023-12-11\16-05-11\protected-dirt\ If you *really* want this content gone, make a manual commit that removes it, and then run the BFG on a fresh copy of your repo. Cleaning -------- Found 742 commits Cleaning commits: 100% (742/742) Cleaning commits completed in 1,919 ms. Updating 2 Refs --------------- Ref Before After --------------------------------------------- refs/heads/kyai_tml_dev | f4659531 | 0d17b95a refs/heads/master | aa9fcf63 | c44db569 Updating references: 100% (2/2) ...Ref update completed in 12 ms. Commit Tree-Dirt History ------------------------ Earliest Latest | | ...DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD D = dirty commits (file tree fixed) m = modified commits (commit message or parents changed) . = clean commits (no changes to file tree) Before After ------------------------------------------- First modified commit | a1520b5a | 186e5d0a Last dirty commit | 67d311f2 | 2ea2144f Deleted files ------------- Filename Git id ------------------------------------------------------------------------------------------------ box_cjg_people_2.9.tgz | 04960a9c (135.4 MB) kyai_chrislusf_seaweedfs_x86-v1.0.0_20230508.tar | bf7a1441 (116.4 MB) kyai_fauria_vsftpd_arm-v1.0.0_20230628.tar | 348db2e3 (389.1 MB) kyai_fauria_vsftpd_x86-v1.0.0_20230504.tar | 70a54bc7 (389.1 MB) kyai_kykj_arm-v1.0.0_20230628.tar | 3271d85e (507.3 MB) kyai_kykj_x86-v1.0.0_20230724.tar | 16020abb (513.0 MB) kyai_mysql_arm-v8.0_20230628.tar | 929b052d (573.9 MB) kyai_mysql_x86-v8.0_20230724.tar | f52a861d (552.7 MB) kyai_nginx_arm-v1.18_20230627.tar | b5b6653d (123.8 MB) kyai_nginx_x86-v1.18_20230724.tar | 0f266b2a (130.8 MB) kyai_rest-latest.tar | fbe6f9ae (390.9 MB) kyai_rest-v1.0.0_20230326.tar | d46e4290 (390.9 MB) kyai_rest_arm-v1.0.0_20230624.tar | 0d0c8f14 (429.7 MB) kyai_rest_x86-v1.0.0_20230724.tar | ab47c3c6 (401.5 MB) kyai_seaweedfs_arm-v1.0.0_20230629.tar | 1538fe00 (112.7 MB) ... In total, 1872 object ids were changed. Full details are logged here: E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding\kyai_3.0_tml.git.bfg-report\2023-12-11\16-05-11 BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding>
-
清理 Git 数据并推送:
cd repo.git git reflog expire --expire=now --all && git gc --prune=now --aggressive git push
以上命令将会删除所有大于 100M 的文件,并将改动推送到远程仓库。
注意要进入项目目录执行:
E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding\kyai_3.0_tml.git>git reflog expire --expire=now --all && git gc --prune=now --aggressive
Enumerating objects: 24994, done.
Counting objects: 100% (24994/24994), done.
Delta compression using up to 16 threads
Compressing objects: 100% (23735/23735), done.
Writing objects: 100% (24994/24994), done.
Selecting bitmap commits: 732, done.
Building bitmaps: 100% (112/112), done.
Total 24994 (delta 12924), reused 10848 (delta 0), pack-reused 0
Removing duplicate objects: 100% (256/256), done.
E:\20230228_HuiYuanKuangNaoCwProject\testKYAI\coding\kyai_3.0_tml.git>
但是执行git push
的时候失败了,不知道为啥。。。
这个错误提示通常表示在尝试向远程仓库推送数据时,网络连接中断或不稳定。这可能是由于几个原因导致的:
-
文件过大:如果你正在尝试上传的文件大小超过了GitHub对单个文件的限制(通常为100MB),则可能会出现此问题。
-
网络问题:你的网络连接可能不稳定,或者你的网络服务提供商可能限制了你的上传带宽。
-
服务器问题:目标服务器可能存在问题,无法接收更多的数据。
有几种可能的解决方案:
-
检查你的网络连接,并确保你的网络服务提供商没有限制你的上传速度。
-
如果你正在尝试上传的文件非常大,你可能需要将其分割成较小的部分,或者尝试使用Git LFS(Large File Storage)。
-
你可以尝试更改 Git 的缓冲区大小。打开命令行输入以下命令:
git config --global http.postBuffer 524288000
。这会将缓冲区大小设置为500MB,可能有助于解决问题。 -
最后,如果以上方法都不能解决问题,你可能需要联系你的服务器提供商,看看是否他们的服务器有任何问题。
后来又成功了。。。。
清理敏感数据
当在公开的 Git 仓库中误上传了密码、API 密钥或其他敏感信息时,可以使用 BFG Repo-Cleaner 来快速清理。以下是操作步骤:
-
克隆一个裸仓库:
git clone --mirror https://github.com/username/repo.git
-
创建一个文本文件(例如
passwords.txt
),在其中列出需要删除的敏感词:password123 API_KEY_ABCD1234
-
使用 BFG 删除敏感词:
bfg --replace-text passwords.txt repo.git
-
清理 Git 数据并推送:
cd repo.git git reflog expire --expire=now --all && git gc --prune=now --aggressive git push
以上命令将会删除所有包含 passwords.txt
文件中列出的敏感词的提交,并将改动推送到远程仓库。文章来源:https://www.toymoban.com/news/detail-781138.html
结论
BFG Repo-Cleaner 是一个非常有用的工具,可以帮助开发者在 Git 项目中清理不需要的数据。相比于其他工具,如 git-filter-branch
,BFG 更简单、更快速。因此,无论是清理大文件还是敏感数据,BFG 都是一个值得尝试的工具。文章来源地址https://www.toymoban.com/news/detail-781138.html
到了这里,关于BFG Repo-Cleaner 清理在Git历史记录中不需要的数据(git仓库臃肿、git仓库太大、清理git仓库大文件、清理.git\objects\pack中的.pack文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!