我意外地将一个不需要的文件(filename.orig在解析合并时)提交到我的存储库几个提交之前,直到现在我才注意到它.我想从存储库历史记录中完全删除该文件.
是否可以重写更改历史记录,以便filename.orig从未首先添加到存储库中?
我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
我们当前的repo有成千上万的提交,一个新的克隆传输几乎一堆数据(有很多jar文件已经被删除了历史).我们希望通过创建一个新的repo来缩小此大小,该repo仅保留repo中当前活动的文件的完整历史记录,或者可能只修改当前repo以清除已删除的文件历史记录.但我不确定如何在实际庄园中做到这一点.
for del in `cat deleted.txt`
do
git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
# The following seems to be necessary every time
# because otherwise git won't overwrite refs/original
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
done;
Run Code Online (Sandbox Code Playgroud)
但鉴于我们在历史上有数以万计的已删除文件和成千上万的提交,运行脚本将需要一个永恒的时间.2小时前我开始运行这个只删除一个文件,filter-branch命令仍在运行,它一次一个地进行40,000多次提交,这是一个带有SSD驱动器的新Macbook pro.
我还阅读了https://help.github.com/articles/remove-sensitive-data页面,但这仅适用于删除单个文件.
有没有人能够做到这一点?我真的想保留当前跟踪文件的历史记录,如果我们无法保留历史记录,我不确定节省空间的好处是否值得创建一个新的回购.