修复旧Git提交的许可证

时间:2017-05-09 07:29:44

标签: git github git-rewrite-history

我目前有一个私有的GitHub存储库,它存在了几年。在README.md文件中有许可证,不再准确。

现在我想将这个私人仓库变成公共仓库,并附带固定许可证。无论如何,所有旧提交仍然包含旧的(错误的)许可证。

我怎么能解决这个问题?我的第一个想法是squash the repository to a single commit and destroy everything else,但也许有更好的方法来达到我想要的目的。

从另一个问题可以看出,保持历史并不重要,但OTOH也不会受到伤害。

真正伤害的是使用错误的许可证进行旧提交。

有什么想法吗?

PS:我想确保没有人能够获得旧的提交,即使他们知道提交的ID。因此,解决此问题的方法还必须注意更新远程存储库,例如GitHub。

1 个答案:

答案 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返回到早期的树,然后重试。