使用 gitpython 从 git 中删除文件
delete files from git using gitpython
我需要以编程方式从 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"'
这条命令有两部分:
index-filter '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 中删除特定文件的所有版本(包括文件更新时的提交消息)。这些版本可能分散在整个提交列表中。
示例:如果总共有 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"'
这条命令有两部分:
index-filter 'git rm --cached --ignore-unmatch foo.txt'
- 这个 删除名为 foo.txt 的文件的所有版本
msg-filter 'sed "s/foo.txt/DELETED/g"'
- 这会更改包含文件名 foo.txt 的提交消息,以指定该文件已被删除
此命令删除 foo.txt 并更改包含 foo.txt 的提交消息以指定文件已被删除。
感谢@unutbu 为我指出所需的过滤器分支选项。