我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).
我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.
我也不想通过删除/.git目录重新开始.
有没有办法删除Git历史记录中特定文件的所有痕迹?
BFG Repo Cleaner站点提供了使用该工具清理存储库的示例,如下所示:
克隆您的存储库的新副本。
$ git clone --mirror git://example.com/some-big-repo.git
Run Code Online (Sandbox Code Playgroud)运行 BFG 来清理你的仓库。
$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
Run Code Online (Sandbox Code Playgroud)使用 git gc 剔除不需要的脏数据
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)将更改推送回远程
$git push
Run Code Online (Sandbox Code Playgroud)我知道 head 分支受到保护,因此 head 分支中大于 100M 的任何文件仍将存在。如果我按照描述运行此工具,我将丢失上述 100M 文件的任何历史记录,对吗?因此,如果旧提交中存在该文件的旧版本,它就会消失,我将无法在以前的状态下使用它......正确吗?
另外,我有一个同事说了以下内容,我想知道这是否属实:
如果您推回到 TFS 中镜像的存储库,对包文件的更改将不会反映在远程和未来的克隆上
您必须在 TFS 中创建一个新存储库并将镜像推送到那里,以便远程选择包文件更改。