微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用git filter-repo作为带有Python模块接口的库?

如何解决如何使用git filter-repo作为带有Python模块接口的库?

我知道我在命令行中将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)

project README提到它可以用作库,我设法通过以下方式安装Python软件包:

python3 -m pip install --user git-filter-repo

但是我很难找到有关如何使用Python API做世界的文档。

解决方法

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

这也可以回答:How to substitute text from files in git history?

如何也知道blob的路径:How to modify a blob considering both its file path and data with git filter-repo?

使用以下测试存储库在git-filter-repo ac039ecc095d中进行了测试:https://github.com/cirosantilli/test-git-filter-repo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。