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

2023-12-14

我知道我在命令行中将 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(使用前将#替换为@)

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

  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 代表 Git 存储库的数学结构是什么

    我正在学习 Git 如果我能描述一下代表 Git 存储库的数学结构 那就太好了 例如 它是一个有向无环图 它的节点代表提交 它的节点有代表分支等的标签 每个节点最多一个标签 没有标签使用两次 我知道这个描述不正确 我只是想解释我正在寻找的内
  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • git reflog 和 log 有什么区别?

    手册页说 log 显示提交日志 reflog 管理 reflog 信息 reflog 信息到底是什么 它有哪些日志没有的信息 日志看起来更详细 git log显示当前的 HEAD 及其祖先 也就是说 它打印提交 HEAD 指向的提交 然后打
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • Git:从 master 以外的分支克隆

    我正在尝试从 Github 的存储库中提取数据 但我不想克隆主分支 我想克隆其他一些分支 当我尝试时git clone
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa

随机推荐

  • 如果服务器文件夹中存在文件,如何执行 SQL Server 代理作业?

    我需要每天导入一个平面文件 该文件每天都会更改名称 文件处理后 需要将其移动到另一个文件夹 我注意到我可以在 SQL Server 代理中安排作业 并且可以告诉它每小时左右运行一次 并且我可以向其中添加 CMD 命令 我找到的解决方案是运行
  • 如何在Python查询中按名称获取字段?

    我在Python脚本中使用Mysql连接 如何按名称从表中获取结果 cursor conn cursor cursor execute SELECT FROM local 现在我通过索引来做到这一点 results cursor fetch
  • 使用 VBA 合并 Excel 工作表

    我有一个 Excel 工作表 例如 OG xls 其中已有一些数据 其中有大约 5000 行 标题位于第一行 最多为 AN 列 这个行数 5000 全年都不会改变 现在我有 5 个 XL 文件 比如 A B C D E 这些文件中的数据每次
  • 使用批处理根据分辨率重命名我的视频文件

    我想根据视频文件的分辨率重命名它们 例如 对于 1080p 的视频 bla bla mp4 我想将其重命名为 bla bla H 264 1080p 该脚本应该能够自动检测视频的分辨率 而且如果文件已经被重命名 则不应重命名它 我无法找到检
  • 使用 iPhone 在 UIView 中嵌入视频

    我想编写一个在视图中下载 或流式传输 视频 根据需要编码 的应用程序 我不想使用 SDK 中的 MPVideoPlayer 因为它会全屏打开视频 我想在视频上放置另一个 UIView 透明 以便我的用户可以在视频上进行注释 任何人有任何想法
  • 限制 App Engine 对自定义域中的 G Suite 帐户的访问

    不久前 Google Apps 现在称为 G Suite 域的 App Engine 相关设置已移至 Google Cloud Console 截至目前 限制关联 G Suite 用户访问 App Engine 实例的记录方法是通过此 Go
  • 在 Jquery 中选择元素之前的同级?

    DOM 看起来像这样 div A div div B div div C div div D div div E div div F div div G div 现在我可以选择 div D div using div selected 那么
  • setInterval at 1ms 似乎实际上不是 1ms

    我正在尝试使用 HTTPRequest 来计算下载文件所需的时间 如下所示 function getFile use strict var url data bin var rawFile new XMLHttpRequest var ti
  • Openssl 和 PHP

    我正在尝试使用 PHP 加载 openssl cli 工具生成的私钥 我使用了以下命令和 PHP 代码 openssl genrsa des3 4096 out private key if key openssl pkey get pri
  • 来自纬度经度位置的国家/地区代码(不使用地理编码服务)

    如何从纬度经度位置获取国家 地区代码 我知道有许多地理编码服务可用 但它们不能满足我的要求 因为我的应用程序在上线几个小时后就被阻止 许多地理编码请求 大多数地理编码服务还提供商业服务 但它们还不是一种选择 因为该项目还处于起步阶段 我做了
  • 拆分函数添加: \xef\xbb\xbf...\n 到我的列表

    我想打开我的file txt并从此文件中分割所有数据 这是我的file txt some data1 some data2 some data3 some data4 some data5 这是我的 python 代码 gt gt gt f
  • 如何在codeigniter中将时间戳转换为日期

    我想转换1373892900000 to Monday 2013 07 15 8 55 AM在代码点火器中 但是 通过使用我编写的函数转换时间戳 我不断收到完全不同的结果 请注意 我需要根据不同的时区更改日期 这就是为什么我想这样写 pub
  • jqGrid loadonce 不适用于 asp.net

    有谁知道如何用 asp net asmx jqGrid 排序解决这个讨厌的问题 因为 为了从 jqGrid 调用 pagemethods 或 asmx Web 服务 需要像这样进行攻击 datatype function ajax url
  • 如何通过 Javascript 设置循环 iMacros?

    1 我无法通过javascript添加设置循环imacros 我该如何添加它 var macro macro CODE macro VERSION BUILD 8011895 n macro TAB T 1 n macro SET ERRO
  • Android - 获取对 Manifest 中定义的 BroadcastReceiver 的引用

    有什么方法可以从代码中获取 Manifest xml 中定义的 BroadcastReceiver 的引用吗 就我而言 我们使用的 BroadcastReceiver 需要包含在 Manifest xml 中 然而 它具有我想在我们的代码中
  • 使用 typeahead 和 Bloodhound 单击时显示完整的建议列表

    我将 Typeahead js 与 Bloodhound 建议引擎一起使用 并希望用户在搜索框中单击后立即显示该列表 我发现了这个 stackoverflow 问题 Twitter TypeAhead 以编程方式显示所有结果 这与我相同 答
  • 与具有依赖关系的动态库链接

    考虑以下场景 共享库 libA so 没有依赖项 共享库 libB so 以 libA so 作为其依赖项 我想编译一个与 libB 链接的二进制文件 我应该仅将二进制文件与 libB 链接还是与 libA 链接 有没有办法只链接直接依赖项
  • 仅在有效文本选择的情况下启用 CKEditor 工具栏按钮?

    我正在开发一个 CKEditor 插件 用于注释文本和添加边距注释 但我希望仅当用户已经选择了一系列文本时才启用一些自定义工具栏按钮 每当用户打字或光标位于单个点 而不是范围 时 按钮 及其关联的命令 都应该被禁用 我是一位经验丰富的插件作
  • 导入错误:无法导入名称“Deque”

    我正在尝试在 Heroku 上托管我的 Discord py 机器人 当我的机器人启动时出现以下错误 2020 01 31T20 49 31 501236 00 00 heroku worker 1 State changed from s
  • 如何使用 git filter-repo 作为带有 Python 模块接口的库?

    我知道我在命令行中将 Python 代码作为字符串给出 例如 git filter repo name callback return name replace b Wiliam b William 但特别是当我进入更复杂的脚本时 这会变得