Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gitpython从git中删除文件_Python_Git_Gitpython - Fatal编程技术网

使用gitpython从git中删除文件

使用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

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

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

如果提交历史记录如下所示,
X
标记我要随文件一起从提交历史记录中删除的提交

O - O - X - X - O - O - X - O - O - O
  • 有可能吗
  • 如果是,最简单的编程方法是什么? 我知道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”

    此命令包含两部分:

  • 索引过滤器'git rm--cached--ignore unmatch foo.txt'
    -此 删除名为foo.txt的文件的所有版本
  • msg filter'sed“s/foo.txt/DELETED/g”
    -这会更改包含文件名foo.txt的提交消息,以指定文件已被删除
  • 此命令删除foo.txt并更改包含foo.txt的提交消息,以指定文件已被删除


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

    我希望这不可能,因为完整的记录是Git的一种观点。我同意@TigerhawkT3的观点,即最好保留大多数文件的记录。尽管对于一些文件,如二进制文件或图像文件(“blob”),这是不可能的不易进行修订控制,但需要成为回购协议的一部分,您可以使用此工具清理提交历史记录:Per:“假设您要从所有提交中删除一个文件(包含机密信息或侵犯版权):“
    git筛选器分支--索引筛选器'git rm--cached--ignore unmatch filename'HEAD
    。请务必小心使用。@unutbu,我尝试了
    过滤器分支
    。它删除了文件,这很好,但保留了文件更新时的提交消息。我还希望能够删除与这些文件相关的提交消息。也许我应该单独问一个问题…@tamjd1:
    git filter branch
    还有一个
    --msg filter
    选项。您应该能够使用它来清理提交消息。手册页中有一些示例。