2

一段时间以来,我一直在将 github 用于一个项目,但仅作为问题跟踪器。所以,今晚我也花了一些时间来处理代码,并犯了一个新手错误:我提交了凭证文件和其他不必要的数据。我现在已将它们添加到.gitignore文件中,它们应该不再是问题,但我看到它们在历史记录中可用。

这带来了一个安全问题,所以我必须解决这个问题并删除那里的敏感数据。我是目前唯一的开发人员,所以这就是为什么我只将代码保留在我的 PC 和实际服务器上,但也想掌握这一点。

到目前为止,我已经尝试了这篇文章,也尝试了这篇文章,发现了一些关于 SO 的问题,但一直无法弄清楚。我大多会遇到这样的错误:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree.

我会删除整个 repo,但是那里有很多问题跟踪数据,所以我需要保留它,所以这不是一个选项。我不介意其他提交,我可以从本地机器上的代码从头开始,但需要一些方法来丢失旧提交及其完整历史记录,或更改这些文件(有些东西.gitignore是目录,所以这可能非常删除繁琐)。

我尝试使用git rebase -i,但在那里我只看到我的最后三个提交(测试),它们没有被推送,其余的在线提交,其中有 10 个左右没有显示在那里。

我使用的 repo 是私有的,我和一个客户只能访问,所以没有第 3 方看到这个。

我是 git 新手,所以感谢您的时间和帮助!

4

4 回答 4

7

首先,这是重要的一点:考虑您的凭据已被盗用。改变它们。无论您此时做什么,它们都不再安全。

现在你已经做到了,你有几个选择:

  • 如果您真的只想从头开始,请使用git push --force. 这可能是您最简单的前进道路。

    git init <new-directory>
    $EDITOR README.md
    git add README.md
    git commit
    git remote add origin https://github.com/user/repo.git
    git push --force origin master
    
  • 或者,您可以使用 删除历史记录中的凭据,如GitHub 帮助页面上关于删除敏感数据filter-branch的概述。

    您的ambiguous argument 'rm'错误可能与正确引用命令有关。确保引用它在文章中显示的内容。

于 2014-01-09T21:37:42.197 回答
2

恕我直言,BFG(在您链接到的 GitHub 帮助页面上已经提到)是最好的(最容易使用和最快的)工具。正如示例所示,这真的很简单。使用 BFG 重写本地历史记录后,将其强制推送到服务器,然后就可以设置了。

于 2014-01-09T21:43:58.350 回答
1

当我尝试运行此命令时,我也遇到了同样的模棱两可的参数错误:

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch path\to\my\file.txt' \
  --prune-empty --tag-name-filter cat -- --all

我能够通过将单引号更改为双引号并将反斜杠更改为斜杠来运行它。

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch path/to/my/file.txt" \
  --prune-empty --tag-name-filter cat -- --all
于 2014-01-26T23:14:19.463 回答
0

即使您已经使用了一段时间,它也足以成为一个安全线程。处理真正的问题:您已经泄露了凭据,您必须先更改它。之后 github 上的文件将没有任何价值,您可以将其留在历史记录中。为了更清楚地说明为什么您甚至不应该费心将其从 github 中删除,假设它已被搜索引擎缓存,因此即使从 github 中删除了该文件,任何人都可以访问该文件。

于 2014-01-09T21:46:39.203 回答