从github中删除文件

时间:2014-01-09 21:32:21

标签: git github rebase git-rewrite-history

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

这会带来安全问题,所以我必须对此进行排序并删除那些敏感数据。我是目前唯一的开发人员,所以这就是为什么我只在我的电脑和实际的服务器上保存代码,但也希望了解这一点。

到目前为止,我已尝试this articlethis one as well并在SO上发现了一些问题,但未能弄清楚这一点。我主要得到一些像这样的错误:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree.

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

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

我使用的回购是私有的,我和客户只能访问,所以没有第三方看到过。

我是git的新手,谢谢你的时间和帮助!

4 个答案:

答案 0 :(得分: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
    
  • 或者,您可以使用filter-branch删除历史记录中的凭据,如GitHub help page on removing sensitive data所述。

    您的ambiguous argument 'rm'错误可能与正确引用命令有关。请务必按照文章中的说明引用它。

答案 1 :(得分:2)

恕我直言,BFG(已在您链接到的GitHub帮助页面上提到过)是最好的(最容易使用且最快)的工具。这真的和examples节目一样简单。使用BFG重写本地历史记录后,将其强制推送到服务器,然后重新设置。

答案 2 :(得分: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

答案 3 :(得分:0)

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