【发布时间】:2019-03-29 13:09:33
【问题描述】:
我有一个 git 存储库,其中包含一些敏感数据可能是硬编码的,或者是正式硬编码的,现在驻留在 git 历史记录中的某些位置。
为了使项目公开可用,以便具有相似兴趣的程序员可以从中受益并回馈更改,我想分叉它以清理有问题的文件。
我考虑的过程如下:
- Shallow/Shared 将 repo 本地克隆到新的本地位置,此文件夹将成为公共变体。后续步骤在新的存储库中。
- 将master分支到一个分支
public-master - 删除所有其他分支引用。
- 消毒
public-master - 壁球
public-master -
git reflog expire --expire-unreachable=now --all && git gc --prune=all --agressive删除所有无法访问的 refs,现在是任何不在公共分支中的 obj -
git push将公共 master 添加回上游到私有存储库中。 - 将源远程设置为公共 repo url,分支到
master。推送到原点。
这是否足以清理我的存储库,或者在此之后是否可以恢复敏感数据。有没有更明智和通用的方法来解决这个问题?有没有多余的步骤?
例如,我可以在一个存储库中完成这一切吗,或者 git-packs 的性质是否意味着我仍然可以推送包含敏感信息的 obj?
【问题讨论】:
-
为了公开它,显然从头开始创建一个只有最新(经过清理的)提交的存储库更好。此外,敏感数据通常会转到一个单独的文件,从第一次提交开始,该文件在 .gitignore 中被忽略。
-
我知道,但这是一个爱好项目,所以我使用了马虎的 opsec。因此,为什么这里需要追溯方法。
-
啊,我明白了,是的,在完成所有这些步骤之后,这实际上相当于刚刚生成了经过清理的版本,然后将工作树复制到了一个全新的 repo 中。唯一的问题是我希望能够从私人仓库中提取,然后他们将拥有未共享的历史记录。
-
@b-fg 。所以我想也许一个更好的问题是,给定一个全新的回购,我怎样才能将新的公共分支移植到我的旧私人回购中。然后将新功能放入公共 repo,然后拉回私有 repo。
标签: git publishing privacy computer-forensics git-reflog