大家好,我是小富~

说个事吧!最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了。这件事导致公司对所有员工进行了一次数据安全的培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致的。

这个事件也给了提了个醒,我平时会写博客用GitHub比较多,吓得我赶紧对自己所有的GitHub仓库进行了排查,庆幸没有提交过敏感信息的记录。但我注意到在过往的提交记录中,有使用公司的Git账号信息提交过代码,TMD这就很难受了。

避免后续产生不必要的麻烦,我决定修改一下提交记录中涉及公司的信息。

注意:以下操作只限于用在自己的Git仓库,别在公司的项目里秀,切记!

设置用户信息

Git进行版本控制的时候,每次的代码提交记录中都包含用户的用户名和邮箱,这些信息在你进行每一次提交时都会被记录下来。我们保不齐会错误地使用了错误的信息,或者需要改用另一个邮箱地址。那这种情况,我们就需要更改我们提交记录中的用户名和邮箱。

可以通过全局设置或者特定仓库设置两种方式来修改我们提交时的用户信息。

全局

全局设置可以影响所有的代码提交。如果你在全局范围内设置了用户名和邮箱后,除非你在特定的项目中覆盖这个设置,否则这个设置会作为默认设置应用于所有的提交。

git config --global user.name "程序员小富"
git config --global user.email "邮箱信息"

你可以通过如下的命令来查看Git的全局配置:

git config --global -l

特定仓库

如果你只想修改某个特定仓库的用户信息,可以在特定仓库的根目录下进行如下操作,Git会将设置得用户名和邮箱仅应用于当前仓库。

git config user.name "程序员小富"
git config user.email "邮箱信息"

篡改提交记录

单条修改

Git提供了amend命令,可以用来修改最新的提交记录。注意,这个命令只会修改最近一次的提交,它能实现以下的功能:

  • 修改提交信息
  • 添加漏掉的文件到上一次的提交中
  • 修改之前提交的文件

用法

它的使用方法比较简单,直接替换用户名、邮箱信息,或者如果已经修改了仓库的用户信息,直接执行命令重置。

# 替换用户名、邮箱信息
git commit --amend --author="{username} <{email}>" --no-edit # 如果已经修改了仓库的用户信息,直接执行命令重置
git commit --amend --reset-author --no-edit

看到最近一次提交的用户名是xiaofu,不是我的个人信息程序员小富,使用amend命令修改一下。

效果

执行命令后最近一次的提交信息从xiaofu变更到了程序员小富,更改成功和预期的效果一致。

git commit --amend --author="程序员小富 <515361725@qq.com>" --no-edit

修改完成之后,别忘了推送到远程仓库。

 git push origin master

批量修改

Git官网提供了很多种修改提交记录信息的方法,这里主要介绍下filter-branch,它可以通过脚本的方式批量修改历史提交记录信息。

filter-branch 它能实现如下的功能,正好符合我们要批量修改历史提交记录中用户、邮箱的需求。

  • 全局修改邮箱地址;
  • 从每一个提交中移除一个文件;
  • 使一个子目录做为新的根目录

用法

历史提交记录中有很多用户名xiaofu提交的记录,现在使用filter-branch批量将他们改写成程序员小富

以下是官网提供的脚本,其逻辑很简单:如果遇到用户名为xiaofu的提交记录,将该提交记录的用户名和邮箱修改为程序员小富515361725@qq.com

git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_NAME" = "xiaofu" ];
then
GIT_AUTHOR_NAME="程序员小富";
GIT_AUTHOR_EMAIL="515361725@qq.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD

为了方便操作,创建一个脚本modifyCommit.sh,放在项目的根目录执行。

chmod +x modifyCommit.sh
sh modifyCommit.sh

执行脚本后稍作等待,出现如下的输出说明已经在执行修改操作了。

执行完毕看到历史提交记录中的用户名xiaofu全都变更成了程序员小富,说明脚本生效了。

如果没有修改成功,可以再次执行,但会出现错误提示A previous backup already exists in refs/original/,说明已经执行过了,执行以下命令清除缓存即可再次执行。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

修改完成之后,别忘了推送到远程仓库。

 git push origin master

GitHub工具

管理GitHub项目,我推荐大家使用GitHub官方的Git客户端工具GitHub Desktop,这个工具专门用来管理GitHub仓库,洁面简洁使用也很方便,主打一个轻量。

有一点比较好,在提交代码时,如果提交的用户信息与当前账号GitHub信息不一致还会有提示,这样就不怕误用其他信息提交了。

总结

如果大家平时会维护自己的GitHub仓库,建议一定一定要仔细的检查提交的代码,像注释里的公司邮箱信息、代码包路径中的公司标识,凡事涉及公司信息的数据一概去除,不要惹一些不必要的麻烦,数据泄漏这种重可大可小不是闹着玩的。

还有GitHub别留太多的个人信息,手机号邮箱就别放了,头像也别傻乎乎的放个自己大头贴,给自己留点回旋的余地。核心思工作和生活要隔离!!!

我是小富~ 下期见

公司敏感数据被上传Github,吓得我赶紧改提交记录的更多相关文章

  1. git使用之如何将github库下载到本地与如何将代码上传github

    git使用之如何将github库下载到本地与如何将代码上传github ---------------------------------------------------------------- ...

  2. 把上传Github的代码添加Cocoapods支持

    开始 这里我将从最初的开始进行介绍,包括Github上创建项目已经上传项目,到最后的支持Cocoapods. 步骤如下: 代码上传Github 创建podspec文件,并验证是否通过 在Github上 ...

  3. webstrom一键上传github及使用

    对于webstrom是我参加it修真园时就推荐使用的,其他编辑器我也没什么使用过.读大学的时候还是比较喜欢 Notepad++. 现在说一下webstrom主要的关键点吧! 一.实现一键上传githu ...

  4. 一篇文章了解Github和Git教程-AndroidStudio上传Github教程

    前言 为了方便保存自己的代码,下班后可以回家继续进行,自己的码农工作,介绍一下Github. 什么是Github呢? 作为一个编程人员,我觉得得了解一下Github吧! 当然,如果你放弃了码农或者技术 ...

  5. 上传github文件及所出现的问题

    上传github所发现的问题 准备工作 使用 git bush 输入下面的命令 git config --global user.email "you@example.com" g ...

  6. IntelliJ cannot log in to GitHub上传github报错解决

    重装系统,新装的Intellij IDEA上新建的项目上传github失败,报错: invalid authentication token ... 此处多为本地git用户的用户名/邮箱,与之前设置的 ...

  7. 使用hexo搭建博客并上传GitHub

    之前在博客园.简书.CSDN等地儿都开过博,一篇文章写好了,我希望能在几个平台可以同步发布,可是操作起来成本不低.几个平台下的富文本编辑器比较起来还是博客园更顺手,看着更舒服,尤其是代码块的操作灵活. ...

  8. svs 在创建的时候 上传文件夹 bin obj 这些不要提交

    svs  在创建的时候 上传文件夹 bin  obj  这些不要提交  右键-去除版本控制并增加到忽略列表

  9. EasyUI实现图片的上传后与其他文本框的提交以及DataGrid中图片的展示

    图片即文件,在jsp中文件上传很简单,一个type为file的input,一个form指定enctype为multipart/form-data,通过post提交到后台利用apache的commons ...

  10. 企业私有源代码上传github致入侵之大疆案判决了

    事件简单回顾: 1.2017年8月28日,大疆宣布“大疆威胁识别奖励计划”,最高3万美元: 2.然而在此之前,大疆农业事业部某员工将企业私有源代码上传到了github: 3.就职于大疆竞对公司Depa ...

随机推荐

  1. Spark RDD惰性计算的自主优化

    原创/朱季谦 RDD(弹性分布式数据集)中的数据就如final定义一般,只可读而无法修改,若要对RDD进行转换或操作,那就需要创建一个新的RDD来保存结果.故而就需要用到转换和行动的算子. Spark ...

  2. XV6中的锁:MIT6.s081/6.828 lectrue10:Locking 以及 Lab8 locks Part1 心得

    这节课程的内容是锁(本节只讨论最基础的锁).其实锁本身就是一个很简单的概念,这里的简单包括 3 点: 概念简单,和实际生活中的锁可以类比,不像学习虚拟内存时,现实世界中几乎没有可以类比的对象,所以即使 ...

  3. 从零开发Java入门项目--十天掌握

    ​ 原文网址:从零开发Java入门项目--十天掌握_IT利刃出鞘的博客-CSDN博客 简介 这是一个靠谱的Java入门项目实战,名字叫蚂蚁爱购.从零开发项目,视频加文档,十天就能学会开发Java项目, ...

  4. Mybatis plus配置MetaObjectHandler无效

    项目环境 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-b ...

  5. ThreadLocal:线程中的全局变量

    最近接了一个新需求,业务场景上需要在原有基础上新增2个字段,接口新增参数意味着很多类和方法的逻辑都需要改变,需要先判断是否属于该业务场景,再做对应的逻辑.原本的打算是在入口处新增变量,在操作数据的时候 ...

  6. numpy 索引,切片 ,转置,变值,多个数组的拼接

  7. R3300L, Q7 ATV Android9固件

    R3300L, Q7 ATV Android9固件 固件来源 https://www.znds.com/tv-1239603-1-1.html 之前在恩山上发布过1080p安卓6固件 https:// ...

  8. 算法打卡|Day4 链表part02

    Day4 链表part02 今日任务 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 目录 Day4 链表part0 ...

  9. 分布式事务:XA和Seata的XA模式

    上一篇内容<从2PC和容错共识算法讨论zookeeper中的Create请求>介绍了保证分布式事务提交的两阶段提交协议,而XA是针对两阶段提交提出的接口实现标准,本文则对XA进行介绍. 1 ...

  10. MySQL快速导入千万条数据(3)

    目录 一.测试环境 二.命令行导入方式 三.LOAD DATA导入方式 四.结论 接上文,本次在较高性能的X86物理机上,做真实生产环境的大数据量导入测试. 一.测试环境 ■ CPU是24核,每核2线 ...