【问题标题】:How to completely remove sensitive commits from GitHub?如何从 GitHub 中彻底删除敏感提交?
【发布时间】:2019-01-12 04:06:42
【问题描述】:

几天前,我阅读了有关 Github 隐私基础的文章,其中说提交者的电子邮件可以通过简单的 Github API 请求查看。

我设置了电子邮件别名,但我想更改过去提交的电子邮件。尝试使用 this 站点和 .gitconfig 的别名

change-commits = "!f() { VAR1=$1; VAR='$'$1; OLD=$2; NEW=$3; 
  echo \"Are you sure for replace $VAR $OLD => $NEW ?(Y/N)\";
  read OK;
  if [ \"$OK\" = 'Y' ] ; 
  then shift 3; 
  git filter-branch --env-filter \"if [ \\\"${VAR}\\\" = '$OLD' ]; 
  then export $VAR1='$NEW';echo 'to $NEW'; fi\" $@; fi;};f " 

在我输入 git log 并且每个提交都有新邮件的步骤之后,但在 API 调用 https://api.github.com/users/(usuername)/events/public 之后,我会看到旧邮件和新邮件

【问题讨论】:

  • 您确实无法更改旧的提交,git filter-branch 不会尝试。 git filter-branch 所做的是将旧提交复制 提交,并在进行新提交之前执行您请求的更改。旧的提交将继续存在,直到没有人引用它们为止;在那之后,Git 最终会——你无法控制何时发生这种情况,因为存储库在 GitHub 上——删除旧的提交。
  • @torek。您可以随时进行您建议的更改,克隆不应复制旧提交的 repo,删除 GitHub 上的 repo,然后使用您的克隆重新初始化。如果旧的提交确实被复制了,那么在本地清理它们会很容易。

标签: git security privacy


【解决方案1】:

As commented,你不能真正“改变”一个提交,只能创建一个新的 具有相同或相似的数据。所以当你做一个git filter-branchgit rebase 或任何其他形式的修改,您仍在创建 新提交

而在运行git push -f时,唯一的区别就是远程 分支参考是强制更新;它仍然发送新的提交和什么 是否处理旧的提交(如果有的话)取决于远程存储库。

对于 GitHub,它不会立即删除那些旧的提交 当您执行强制推送时从存储库中获取。

来自官方GitHub Help

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

这篇文章告诉你如何让敏感数据的提交无法访问 来自 GitHub 存储库中的任何分支或标签。然而,这很重要 请注意,这些提交可能仍然可以在任何克隆或分支中访问 您的存储库,直接通过 GitHub 上缓存视图中的 SHA-1 哈希, 并通过引用它们的任何拉取请求。你什么都做不了 关于存储库的现有克隆或分支,但您可以永久 通过以下方式删除 GitHub 上所有存储库的缓存视图和拉取请求 联系 GitHub 支持。

所以,为了让旧的提交以合理的方式停止出现在 API 中 时间范围,唯一的选择是:

警告:虽然前一个选项更快,但它也会删除 wikiissuescmets


注意:有更全面的解释 悬空提交在这里:

https://stackoverflow.com/a/32840254/10095231

【讨论】:

    【解决方案2】:

    我会为此使用 git bfg。

    效果很好,也很容易使用。它将完全删除您需要从 git 历史记录中删除的内容。

    Git BFG Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 2016-05-31
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多