使用gitpython从git中删除文件
我需要以编程方式从git中删除特定文件的所有版本(包括更新文件时的提交消息)。这些版本可能分散在提交列表中 示例:如果总共有10次提交,并且相关文件在提交3、4和7时更新。我需要从提交3开始删除文件,并在提交3、4和7时删除提交消息 如果提交历史记录如下所示,使用gitpython从git中删除文件,python,git,gitpython,Python,Git,Gitpython,我需要以编程方式从git中删除特定文件的所有版本(包括更新文件时的提交消息)。这些版本可能分散在提交列表中 示例:如果总共有10次提交,并且相关文件在提交3、4和7时更新。我需要从提交3开始删除文件,并在提交3、4和7时删除提交消息 如果提交历史记录如下所示,X标记我要随文件一起从提交历史记录中删除的提交 O - O - X - X - O - O - X - O - O - O 有可能吗 如果是,最简单的编程方法是什么? 我知道GitPython没有任何内置功能,但它确实允许使用python
X
标记我要随文件一起从提交历史记录中删除的提交
O - O - X - X - O - O - X - O - O - O
对我有效的解决方案是git命令:
“git filter branch-f--index filter'git rm--cached--ignore unmatch foo.txt”--msg filter'sed“s/foo.txt/DELETED/g”
此命令包含两部分:
索引过滤器'git rm--cached--ignore unmatch foo.txt'
-此
删除名为foo.txt的文件的所有版本msg filter'sed“s/foo.txt/DELETED/g”
-这会更改包含文件名foo.txt的提交消息,以指定文件已被删除感谢@unutbu为我指出了所需的过滤器分支选项。我希望这不可能,因为完整的记录是Git的一种观点。我同意@TigerhawkT3的观点,即最好保留大多数文件的记录。尽管对于一些文件,如二进制文件或图像文件(“blob”),这是不可能的不易进行修订控制,但需要成为回购协议的一部分,您可以使用此工具清理提交历史记录:Per:“假设您要从所有提交中删除一个文件(包含机密信息或侵犯版权):“
git筛选器分支--索引筛选器'git rm--cached--ignore unmatch filename'HEAD
。请务必小心使用。@unutbu,我尝试了过滤器分支
。它删除了文件,这很好,但保留了文件更新时的提交消息。我还希望能够删除与这些文件相关的提交消息。也许我应该单独问一个问题…@tamjd1:git filter branch
还有一个--msg filter
选项。您应该能够使用它来清理提交消息。手册页中有一些示例。