我知道我在命令行中将 Python 代码作为字符串给出,例如:
git-filter-repo --name-callback 'return name.replace(b"Wiliam", b"William")'
但特别是当我进入更复杂的脚本时,这会变得非常笨拙。
相反,有没有办法做类似的事情:
main.py
import git_filter_repo
def name_callback(name):
return name.replace(b"Wiliam", b"William")
git_filter_repo.name_callback(name_callback)
The 项目自述文件提到它可以用作库,我设法使用以下命令安装 Python 包:
python3 -m pip install --user git-filter-repo
但我无法轻松找到有关如何使用 Python API 构建 hello world 的文档。
源码的最后几行https://github.com/newren/git-filter-repo/blob/7b3e714b94a6e5b9f478cb981c7f560ef3f36506/git-filter-repo#L3946是一个很好的起点,所以我可以做这样的事情:
#!/usr/bin/env python
import git_filter_repo
def blob_callback(blob, callback_metadata):
blob.data = blob.data.replace(b'd1', b'asdf')
# Args deduced from:
# print(git_filter_repo.FilteringOptions.parse_args(['--refs', 'HEAD', '--force'], error_on_empty=False))
args = git_filter_repo.FilteringOptions.default_options()
args.force = True
args.partial = True
args.refs = ['HEAD']
args.repack=False
args.replace_refs='update-no-add'
git_filter_repo.RepoFilter(
args,
blob_callback=blob_callback
).run()
其目的相当于:
git filter-repo --refs HEAD <(echo 'd1==>asdf') --force
这也回答了:如何替换 git 历史记录中文件中的文本?
如何还知道 blob 的路径:如何使用 git filter-repo 考虑文件路径和数据来修改 blob?
使用此测试存储库在 git-filter-repo ac039ecc095d 中进行测试:https://github.com/cirosantilli/test-git-filter-repo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)