修复旧 Git 提交中的许可证
Fix license in old Git commits
我有一个目前私有的 GitHub 存储库,它已经存在几年了。在 README.md
文件中有一个许可证,它不再准确。
现在我想把这个私人仓库变成 public 一个,有固定的许可证。无论如何,所有旧的提交仍然包含旧的(错误的)许可证。
我该如何解决这个问题?我的第一个想法是,但也许有更好的方法来实现我想要的。
正如您从另一个问题中看到的那样,保留历史并不重要,但 OTOH 它也没有坏处。
真正有害的是使用错误的许可证进行旧提交。
有什么想法吗?
PS:我想确保没有人能够获得旧提交,即使他们知道提交的 ID。所以,这个的解决方法还必须注意更新远程仓库,比如GitHub.
您可以使用 filter-branch
来执行此操作。首先编写一个小脚本,为给定的提交重写树。例如,以下内容仅在 README.md
文件存在时才将 something
更改为 something else
。
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
返回到较早的树并重试。
我有一个目前私有的 GitHub 存储库,它已经存在几年了。在 README.md
文件中有一个许可证,它不再准确。
现在我想把这个私人仓库变成 public 一个,有固定的许可证。无论如何,所有旧的提交仍然包含旧的(错误的)许可证。
我该如何解决这个问题?我的第一个想法是
正如您从另一个问题中看到的那样,保留历史并不重要,但 OTOH 它也没有坏处。
真正有害的是使用错误的许可证进行旧提交。
有什么想法吗?
PS:我想确保没有人能够获得旧提交,即使他们知道提交的 ID。所以,这个的解决方法还必须注意更新远程仓库,比如GitHub.
您可以使用 filter-branch
来执行此操作。首先编写一个小脚本,为给定的提交重写树。例如,以下内容仅在 README.md
文件存在时才将 something
更改为 something else
。
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
返回到较早的树并重试。