python - 使用 gitpython 从 git 删除文件

标签 python git gitpython

我需要以编程方式从 git 中删除特定文件的所有版本(包括更新文件时的提交消息)。版本可能分散在整个提交列表中。

示例:如果总共有 10 次提交,并且相关文件在提交 3、4 和 7 处更新。我需要从提交 3 开始删除该文件,并删除提交 3、4 和 7 处的提交消息7.

如果提交历史记录如下,X 标记我想要从提交历史记录中与文件一起删除的提交。

O - O - X - X - O - O - X - O - O - O
  1. 这可能吗?
  2. 如果是,以编程方式执行此操作的最简单方法是什么? 我知道 GitPython 没有任何内置功能,但它确实允许使用 python 在 shell 上运行 git 命令。

最佳答案

对我有用的解决方案是 git 命令: "git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch foo.txt' --msg-filter 'sed “s/foo.txt/DELETED/g”'

该命令有两部分:

  1. index-filter 'git rm --cached --ignore-unmatch foo.txt' - 这 删除名为 foo.txt 的文件的所有版本
  2. msg-filter 'sed "s/foo.txt/DELETED/g"' - 这会更改包含文件名 foo.txt 的提交消息,以指定该文件已被删除<

此命令删除 foo.txt 并更改包含 foo.txt 的提交消息以指定该文件已被删除。

感谢 @unutbu 向我指出所需的过滤器分支选项。

关于python - 使用 gitpython 从 git 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36413967/

相关文章:

python - 如何在不丢失数据的情况下将数据转换为图像

python - 使用 Fabric 进行 Django 自动部署

python - 如何使用 mysql-connector 检索日期时间值?

git - 有什么比 .gitignore 更有效的方法来将文件保留在存储库之外?

python - 如何使用 GitPython 获取提交中文件的源代码?

Python取消引用URL但保留超链接

git - 对分包商 stash git 存储库的内容

python - 如何使用 GitPython 推送到远程仓库

python - 使用 GitPython 检查合并是否存在冲突

git - 无法确定Java版本,Android Studio,Ubuntu 14.04