我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
这似乎git gc --aggressive真的可以清理我的回购,但是当我做的时候,git push一切都已经是最新的了.有没有办法清理服务器?
为了从 GitHub 存储库中删除提交,典型的建议是在本地删除提交(例如,通过git rebase -i)并将修改后的分支强制推送到原始远程分支上。
但是,如果有问题的远程分支是拉取请求的一部分,GitHub 现在会很有帮助地显示消息
<user>将<remote_branch>分支从<old-commit>到<new-commit>
和显示的链接以查看之间的差异<old-commit>和<new-commit>。(这似乎是最近的变化,我不记得以前遇到过这个消息。)
根据这里的另一个答案,GitHub 应该定期删除不再被引用的提交。但是因为他们确实在他们的 UI 中引用了旧的提交,我怀疑他们会保留它。(我已经很长时间没有看到这个明显的新功能了,也没有发现任何官方提到它。)
是否可以以防止其他用户看到该提交的方式删除远程提交?或者至少可以从 PR 讨论页面中删除上面的消息?有没有其他方法可以更改 PR 底层分支的内容,而每个人都无法从 PR 页面访问旧提交(至少除非他们知道提交哈希)?
(这个问题与删除密码等敏感信息无关 - 我知道无论之后是否有可能删除提交,这些都应该被视为受到损害。)
我一直在尝试通过将一些文件移动到 git LFS 来减小 Git 存储库的大小。再加上几个 100 个命令,这里我们的文件位于 git LFS 中,并且我的 git 提交中不再有这些文件的历史记录。
然而,每当我克隆存储库时,我仍然会下载大约 3GB 的对象。我通过在 Visual Studio Team Services 中创建一个新存储库来解决这个问题,在本地修剪和垃圾收集我的存储库,然后推送到那里后,它减少到 300mb。(在这篇文章中本地执行此操作的命令:Git:什么是悬空提交/blob 以及它们来自哪里?)
但是我无法想象您总是必须删除/重新创建完整的存储库才能删除悬而未决的提交。
我还尝试过执行 git init,然后将其推送到现有存储库上,但它只会进一步增加对象数量。
对于也遇到类似问题的任何人,这些是我执行的用于创建新存储库而不需要悬空提交的命令,但是我想了解如何在现有存储库中执行此操作而不必删除它:
git clone https://avavedse.visualstudio.com/Test/_git/TestRepository
cd blahblah
git reflog expire --expire=now --all
git gc --prune=now
git remote add newrepo https://avavedse.visualstudio.com/Test/_git/TestRepositoryNewEdition
git push newrepo
Run Code Online (Sandbox Code Playgroud)