我目前有一个私有的GitHub存储库,它存在了几年。在README.md
文件中有许可证,不再准确。
现在我想将这个私人仓库变成公共仓库,并附带固定许可证。无论如何,所有旧提交仍然包含旧的(错误的)许可证。
我怎么能解决这个问题?我的第一个想法是squash the repository to a single commit and destroy everything else,但也许有更好的方法来达到我想要的目的。
从另一个问题可以看出,保持历史并不重要,但OTOH也不会受到伤害。
真正伤害的是使用错误的许可证进行旧提交。
有什么想法吗?
PS:我想确保没有人能够获得旧的提交,即使他们知道提交的ID。因此,解决此问题的方法还必须注意更新远程存储库,例如GitHub。
答案 0 :(得分:4)
您可以使用filter-branch
执行此操作。首先编写一个小脚本,为给定的提交重写树。例如,仅当something
文件存在时,才会将something else
更改为README.md
。
if [ -f README.md ]; then
sed 's/something/something else/g' README.md > tmp
mv tmp README.md
fi
将其另存为change.sh
,然后运行以下
git filter-branch --tree-filter "/bin/bash $(pwd)/change.sh" HEAD
这将重写从HEAD返回的所有提交。如果您犯了错误,可以使用git reset
返回到早期的树,然后重试。