git 命令 远程存储库中删除敏感数据

如果将敏感数据(如密码或SSH密钥)提交到Git存储库,则可以将其从历史记录中删除。 要从存储库的历史记录中完全删除不需要的文件,您可以使用git filter-branch命令或BFG Repo-Cleaner开源工具。

git filter-branch命令和BFG Repo-Cleaner重写了您的存储库的历史记录,该历史记录更改了您更改的现有提交和任何依赖提交的SHA。 更改的提交SHA可能会影响存储库中的打开拉取请求。我们建议在从存储库中删除文件之前合并或关闭所有打开的拉取请求。

您可以从最新提交中删除该文件git rm。有关删除使用最新提交添加的文件的信息,请参阅“ 从存储库的历史记录中删除文件 ”。

警告:一旦您将提交推送到GitHub,您应该考虑它包含的任何数据是否被泄露。
如果您提交了密码,请更改密码!如果您提交了密钥,请生成一个新密钥。

本文将告诉您如何使用GitHub存储库中任何分支或标记无法访问敏感数据的提交。
但是,重要的是要注意,这些提交仍然可以在存储库的任何克隆或分支中访问,直接通过GitHub上缓存视图中的SHA-1哈希,以及引用它们的任何拉取请求。
您无法对存储库的现有克隆或分支执行任何操作,但您可以通过联系GitHub支持永久删除所有存储库的缓存视图并在GitHub上提取请求。

从存储库的历史记录中清除文件

使用BFG

该[BFG回购清机]是一种建立和开源社区维护的工具。它git filter-branch为删除不需要的数据提供了更快,更简单的替代方案。例如,要删除包含敏感数据的文件并保持最新的提交不变,请运行:

bfg --delete-files 你的文件 - 敏感数据

要替换passwords.txt存储库历史记录中可以找到的所有文本,请运行:

bfg --replace-text passwords.txt

有关完整用法和下载说明,请参阅[BFG Repo-Cleaner]的文档。

使用filter-branch
警告:如果git filter-branch在存储更改后运行,则无法使用其他存储命令检索更改。
在运行之前git filter-branch,我们建议您取消所做的任何更改。
要解除您已经存储的最后一组更改,请运行git stash show -p | git apply -R。
有关更多信息,请参阅Git Tools Stashing。

为了说明git filter-branch工作原理,我们将向您展示如何从存储库的历史记录中删除包含敏感数据的文件并将其添加到其中,.gitignore以确保不会意外重新提交。

  1. 如果您的历史记录中还没有包含敏感数据的存储库的本地副本,请将存储库克隆到本地计算机。
$ git clone https://github.com/ YOUR-USERNAME / YOUR-REPOSITORY
在/ Users / YOUR-FILE-PATH / YOUR-REPOSITORY /.git/
remote中
初始化的空Git存储库:计数对象:1301,完成。remote:压缩对象:100%(769/769),完成。
remote:总计1301(delta 724),重用910(delta 522)
接收对象:100%(1301/1301),164.39 KiB,完成。
解决增量:100%(724/724),完成。
  1. 导航到存储库的工作目录。
cd 你的存储
  1. 运行以下命令,替换为要删除的文件PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA的路径,而不仅仅是文件名。这些论点将:
  • 强制Git处理,但不检查每个分支和标记的整个历史记录
  • 删除指定的文件,以及作为结果生成的任何空提交
  • 覆盖现有标签
$ git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA '\
--prune-empty --tag-name-filter cat  -  --all
重写48dc599c80e20527ed902928085e7861e6b3cbe6(266/266)Ref'refs 
/ heads / master'被重写
注意:如果具有敏感数据的文件曾经存在于任何其他路径中(因为它已被移动或重命名),则还必须在这些路径上运行此命令。
  1. 添加包含敏感数据的文件,.gitignore以确保您不会意外地再次提交它。
$ echo“ YOUR-FILE-WITH-SENSITIVE-DATA ”>> .gitignore
$ git add .gitignore
$ git commit -m“将你的文件与敏感数据添加到.gitignore”
[master 051452f]添加你的文件 - SENSITIVE-DATA到.gitignore 
1个文件发生了变化,1个插入(+),0个删除( - )
  1. 仔细检查您是否从存储库的历史记录中删除了所需的所有内容,并检查了所有分支机构。

  2. 一旦您对存储库的状态感到满意,强制推送您的本地更改以覆盖您的GitHub存储库,以及您推送的所有分支:

git push origin --force --all 
计数对象:1074,完成。
Delta压缩使用2个线程。
压缩对象:100%(677/677),完成。
写作对象:100%(1058/1058),148.85 KiB,完成。
总计1058(delta 590),重用602(delta 378)
到https://github.com/ 你的用户名 / YOUR-REPOSITORY .git 
+ 48dc599 ... 051452f master  - > master(强制更新)
  1. 要从标记版本中删除敏感文件,您还需要强制推送Git标记:
git push origin --force --tags 
计数对象:321,完成。
Delta压缩使用多达8个线程。
压缩对象:100%(166/166),完成。
书写对象:100%(321/321),331.74 KiB | 0字节/秒,完成。
总计321(delta 124),重复使用269(delta 108)
到https://github.com/ 你的用户名 / YOUR-REPOSITORY .git 
+ 48dc599 ... 051452f master  - > master(强制更新)
  1. 告诉您的协作者重新绑定,而不是合并他们创建的旧(受污染)存储库历史记录中的任何分支。 一次合并提交可以重新引入一些或者你刚刚陷入清除麻烦的污染历史。

  2. 经过一段时间后,您确信git filter-branch没有意外的副作用,您可以使用以下命令(使用Git 1.8.5或更高版本)强制取消引用本地存储库中的所有对象并进行垃圾回收:

git for-each-ref --format ='delete%(refname)'refs / original | git update-ref 
--stdin git reflog expire --expire = now --all 
git gc --prune = now 
计数对象:2437,完成。
使用最多4个线程进行增量压缩。
压缩对象:100%(1378/1378),完成。
书写对象:100%(2437/2437),完成。
总计2437(delta 1461),重复使用1802(delta 1048)
注意:您还可以通过将过滤的历史记录推送到新的或空的存储库,然后从GitHub进行新的克隆来实现此目的。

避免将来意外提交

有一些简单的技巧可以避免提交你不想提交的东西:

  • 使用[GitHub Desktop]或[gitk]等可视程序提交更改。可视程序通常可以更容易地查看每次提交时将添加,删除和修改哪些文件。
  • 避免捕获所有的命令git add .,并git commit -a在命令行使用git add filename,并git rm filename单独舞台文件,来代替。
  • 用于git add --interactive在每个文件中单独查看和分阶段更改。
  • 使用git diff --cached审查您已经上演提交更改。git commit只要您不使用该-a标志,这就是产生的确切差异。

转载于:https://my.oschina.net/medivhxu/blog/2051884

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值