使用gitpython

时间:2016-04-04 22:24:12

标签: python git gitpython

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

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

如果提交历史记录如下,X标记我要从提交历史记录中删除的提交以及文件。

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

1 个答案:

答案 0 :(得分:1)

对我有用的解决方案是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. 的文件的所有版本
  3. msg-filter 'sed "s/foo.txt/DELETED/g"' - 这会改变包含文件名foo.txt的提交消息,以指定文件已被删除
  4. 此命令删除foo.txt并更改包含foo.txt的提交消息,以指定该文件已被删除。

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