查找修改GIT存储库中与模式匹配的文件名的提交

查找修改GIT存储库中与模式匹配的文件名的提交,git,find,filenames,Git,Find,Filenames,我想在我的代码库中找到添加视频文件以丢弃它们的提交。 有没有办法在git中查找这些文件 例如,假设所有视频的文件名都以扩展名.wmv结尾;我想找到所有引入这些文件的提交,并通过修复或其他方式将其删除 有什么想法吗?您可以将git log与pathspec一起使用: git log --all -- '*.wmv' 这将获得对.wmv文件进行更改的所有提交。是的,这也将下降到子目录中(但是您必须用单引号将pathspec括起来,所以它将按原样传递给git) 如果您只对提交哈希(脚本等)感兴趣,请

我想在我的代码库中找到添加视频文件以丢弃它们的提交。 有没有办法在git中查找这些文件

例如,假设所有视频的文件名都以扩展名.wmv结尾;我想找到所有引入这些文件的提交,并通过修复或其他方式将其删除


有什么想法吗?

您可以将
git log
与pathspec一起使用:

git log --all -- '*.wmv'
这将获得对.wmv文件进行更改的所有提交。是的,这也将下降到子目录中(但是您必须用单引号将pathspec括起来,所以它将按原样传递给git)

如果您只对提交哈希(脚本等)感兴趣,请直接使用
git rev list
machine:

git rev-list --all -- '*.wmv'

如果您想从所有提交中删除这些文件,请考虑用<代码>筛选器分支< /C>命令重写整个历史。例如:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD

是的,就像前面提到的,我认为thinko是删除引入它们的提交不会删除blob


有关主题和示例的详细介绍,请参见。如果目标是从存储库中删除文件(从而重写历史记录),请使用,例如:

如果文件相关,则可以使用将其置于版本控制之下。为了(同时重写历史),您可以执行以下操作:

git-lfs-migrate \
    -s original.git  \
    -d converted.git \
    -l https://user:passwd@custom-server.org:8080 \
    '*.wmv'
为了简单地列出或检查提交,我参考knittl的回答:

git rev-list --all -- '*.wmv'
git log --all -- '*.wmv'

这也可以在gitk中使用View/newview/Enter文件和目录,每行一个

但是请注意,您需要一个包含文件名路径部分的通配符,否则将不会显示任何内容

例如,如果您有一个名为backup-script.sh的文件,文件树中的不同位置显示了不同的生命(!),并且您希望查看所有版本,则必须指定:

*/backup-script.sh
您可以尝试以下方法:

git log --follow *.wmv

这将列出修改wmv文件的所有提交(带有哈希)。

要仅查看提交哈希和每个提交的相关文件名,您可以使用:

git rev-list --all -- '*.wmv' $1 | while read x; do git diff-tree --name-only -r $x; done | grep -E '((\.wmv$)|(^[^\.]+$))'

这将打印出提交哈希,后跟与搜索字符串匹配的任何文件名。

这似乎根本不起作用。在这两个命令和漫长的等待之后,我什么都没有。@bastes:那么在你的树中有n.o wmv文件…@adl的答案是更好的,尽管这不起作用。我尝试git log--all--'*.java',但在查找时什么也没有得到-名称'*.java'列出所有文件。@misiu\u mp:它确实有效(我刚刚在git.git克隆中尝试过:
git日志--'*.sh'
)。当通配符被逐字传递给git命令时,它会按预期在子目录中查找文件(即
/t/*
中的所有脚本)
find-name'*.java'
将列出当前工作副本中的所有文件,它不会遍历存储库的历史记录
git log
只对跟踪的文件有效。该死,我一定有一个坏版本,因为重新编译最新的1.7.9.3就像你描述的那样有效。但我向上帝发誓,它没有起作用。这正是我真正打算做的。感谢您的命令。该链接现在已断开:请尝试不完全符合OP的需要:
--follow
仅适用于最新Git中的一个文件。
git rev-list --all -- '*.wmv' $1 | while read x; do git diff-tree --name-only -r $x; done | grep -E '((\.wmv$)|(^[^\.]+$))'