使用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

使用BFG清除git仓库中的隐私文件或大文件的更多相关文章

  1. git 仓库中删除历史大文件

    git 仓库中删除历史大文件 在git中增加了一个很大的文件,而且被保存在历史提交记录中,每次拉取代码都很大,速度很慢.而且用删除 提交历史记录的方式不是很实际. 以下分几个步骤介绍如何减小.git文 ...

  2. 克隆git仓库中的一个分支

    克隆git仓库中的某一个分支,可用如下命令: git clone -b <branch_name> <repo> 如:git clone -b hdcp_ree_tee_dev ...

  3. git忽略文件并删除git仓库中的文件

    问题描述 不慎在创建.gitignore  文件之前的时候将文件push到了 git仓库,即使之后在.gitignore文件中写入新的过滤规则,这些规则也不会起作用的,git依然会对所有git仓库中的 ...

  4. 新增项目到GIT仓库中

    在本地新建项目的目录中打开Git Bash命令行工具 运行以下命令,设置全局信息(包括用户名,邮箱地址) git config --global user.name "你的姓名" ...

  5. 如何将本地git仓库中的代码上传到github

    1,  在github上新建一个仓库,比如为:CSS3Test,仓库地址为:https://github.com/hyuanyuanlisiwei/CSS3Test 2,本地git仓库中的文件项目为C ...

  6. 如何永久删除git仓库中敏感文件的提交记录

    如何永久删除git仓库中敏感文件的提交记录 参考: 1. https://help.github.com/articles/remove-sensitive-data/

  7. (转)如何将本地git仓库中的代码上传到github

    1,  在github上新建一个仓库,比如为:CSS3Test,仓库地址为:https://github.com/hyuanyuanlisiwei/CSS3Test 2,本地git仓库中的文件项目为C ...

  8. 如何删除GIT仓库中的敏感信息

    如何删除GIT仓库中的敏感信息 正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉.公司可能其它还有相 ...

  9. 使用 .gitignore 忽略 Git 仓库中的文件

    .gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或 ...

随机推荐

  1. python(36)- 测试题

    1.8<<2等于? 32 “<<”位运算 264 132 64 32 16 8 4 2 1 原始位置 0 0 0 0 0 1 0 0 0 想左位移2位 0 0 0 1 0 0 ...

  2. 【转载】C#中的==、Equal、ReferenceEqual

    1. ReferenceEquals, == , Equals Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等. a) ReferenceEquals ...

  3. STL之set具体解释(二)

    首先来看看set集合容器: set集合容器实现了红黑树的平衡二叉树数据结构.在插入元素时它会自己主动调整二叉树的排列,把该元素放到适当的位置,而且 保证左右子树平衡.平衡二叉检索树採用中序遍历算法. ...

  4. oracle ORA-06550

    declare  cnt integer; begin     select count(0)     into cnt     from user_all_tables    where table ...

  5. g++ 6.4编译opencv-2.4.10报错记录

      fetch公司的项目进行编译,此项目依赖opencv库.由于本人一直比较偏爱fedora,但也因此给我带来了许多"乐趣"(麻烦).fedora一直走得比较前沿,g++ 6.3了 ...

  6. java_类型强转

    class Father{ public void fromFather(){ System.out.println("fromFather"); } } interface in ...

  7. Oracle 数据库中序列结合触发器实现主键自增长

    一.数据表名称为T_OFFICE,其主键为PID(number类型) 二.首先为数据表的PID字段创建序列 序列名称:S_T_OFFICE_PID 序列详细内容: 三.创建相应的触发器 触发器名称:T ...

  8. LESS和sa

    一. Sass/Scss.Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量 ...

  9. Impala 安装笔记3一impala安装

    安装impala之前,确认满足Cloudera Impala Requirements中要求的所有条件: Supported Operating Systems Supported CDH Versi ...

  10. 在iOS平台使用ffmpeg解码h264视频流(转)

    在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,ffmpeg提供avformat_open_input接口,直接将文件路径或UR ...