我有一个git存储库,其中包含一些文件,这些文件包含一些可能经过硬编码或正式硬编码的敏感数据,现在位于git历史记录中的某些位置。
为了使该项目公开可用,以便具有相似兴趣的程序员可以从中受益并贡献所做的更改,我想对其进行分叉以清理有问题的文件。
我考虑的过程如下:
public-master
public-master
public-master
git reflog expire --expire-unreachable=now --all && git gc --prune=all --agressive
删除所有无法访问的引用,这是公共分支中不在的所有obj git push
将上游的公共母版重新添加到私有存储库中。master
。推到原点。这足以清理我的仓库,还是可以在此之后恢复敏感数据。有没有更明智,更通用的方法来解决此问题?是否有任何多余的步骤?
例如,我可以在一个存储库中完成所有操作吗,还是git-packs的性质意味着我仍然可以推送包含敏感信息的obj
?
答案 0 :(得分:2)
唯一的问题是我希望能够从私有存储库中提取信息,然后它们将具有未共享的历史记录。
这似乎是不可避免的,因为您已经更改了分支历史并对其进行了压缩。
我不会从新的公共存储库中撤出,而只是考虑对一个新的存储库克隆所做的更改,然后决定要添加到旧私有存储库的本地克隆中的一个:
# update local content of new repo
cd /path/to/public/repo
git pull
# check what needs to be added
cd /path/to/clone/of/old/repo
git --work-tree=/path/to/public/repo add -p .
您将看到新旧之间的差异,这是由公共存储库上可能进行的新改进所致。
答案 1 :(得分:2)
结合@VonC和@ b-fg答案我认为最明智的解决方案如下。 可以发现,很容易用可能包含敏感日期的obj污染新的公共存储库,而建立一个新的公共存储库即可。
public
public
git --work-tree=/path/to/private add -p .
使git与公共索引一起运行,但私有的工作树已运行。现在,公共仓库已将清理过的分支机构的所有工作树都上演了git commit
。git reset --hard
git remote add public file://path/to/public/repo
private/public
和public/master
现在不相交了。因此,我们需要将它们嫁接在一起。现在使用private/public
设置git branch -u public master
的上游,拉出历史记录git pull --allow-unrelated-histories
git remote set-url public --push "This Branch is Read-Only"
现在仅在公共存储库中启用新功能,然后根据需要将其拉回私有功能中。