大家好,我是小富~

说个事吧!最近公司发生了一个事故,有同事不小心把敏感数据上传到了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. [ABC145E] All-you-can-eat

    2023-02-25 题目 题目传送门 翻译 翻译 难度&重要性(1~10):5 题目来源 AtCoder 题目算法 背包dp 解题思路 设 \(dp_i\) 为最后一道菜在第 \(i\) 时 ...

  2. ChatGPT接入Siri(保姆级教程)

    今天,我将为大家分享如何将ChatGPT应用集成到苹果手机的Siri中 (当然手机是需要魔法(TZ)的) 第一步:获取OpenAPI的Key 提取API网址:https://platform.open ...

  3. MediaBox助力企业一站式获取音视频能力

    以一只音视频百宝箱,应对「千行千面」. 洪炳峰.楚佩斯|作者 大家好,今天我分享的主题是MediaBox--行业音视频数字化再加速. 根据权威数据表明,65%的行业数字化信息来自视频,基于此,音视频技 ...

  4. Eclipse修改Web项目名称

    Eclipse修改Web项目名称需要两步: 1:修改该项目目录下:.project文件 <projectDescription><name>SpringMVC-Annotati ...

  5. Java 中for循环和foreach循环哪个更快?

    摘要:本文由葡萄城技术团队于博客园发布.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在Java编程中,循环结构是程序员常用的控制流程,而for循环 ...

  6. 记一次 .NET 某仪器测量系统 CPU爆高分析

    一:背景 1. 讲故事 最近也挺奇怪,看到了两起 CPU 爆高的案例,且诱因也是一致的,觉得有一些代表性,合并分享出来帮助大家来避坑吧,闲话不多说,直接上 windbg 分析. 二:WinDbg 分析 ...

  7. Teamcenter RAC 开发之《PlaceHolder》

    背景 做个swing表单,有时候想实现一些网页input标签的placeHolder提示,可能本人写vue or html写多,对某些细节有强迫症,所以找小下资料 实现方法(Swingx) 看源码

  8. MySQL系列之主从复制进阶——延时从库、半同步、过滤复制、GTID复制

    目录 1. 延时从库 1.1介绍 1.2 为什么要有延时从 1.3 配置延时从库 1.4 延时从库应用 1.4.1 故障恢复思路 1.4.2 故障模拟及恢复 2. 半同步 *** 2.1 半同步复制工 ...

  9. Linux系列教程——Linux文件编辑、Linux用户管理

    @ 目录 1 Linux基本权限 1.权限基本概述 1.什么是权限? 2.为什么要有权限? 3.权限与用户之间的关系? 4.权限中的rwx分别代表什么含义? 2.权限设置示例 1.为什么要设定权限,我 ...

  10. 重写equals方法的注意事项

    重写equals方法的注意事项   一. 在重写equals方法时,要注意满足离散数学上的特性1   自反性:对任意引用值X,x.equals(x)的返回值一定为true.2   对称性:对于任何引用 ...