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

时间:2011-06-27 08:47:12

标签: git find filenames

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

例如,假设所有视频的文件名以扩展名.wmv结尾;我想找到介绍这些文件的所有提交,并通过修复或其他东西摆脱它们。

有什么想法吗?

7 个答案:

答案 0 :(得分:34)

您可以将git log与pathspec:

一起使用
git log --all -- '*.wmv'

这将为您提供所有对.wmv文件进行更改的提交。是的,这也将下降到子目录中(但你必须用单引号包围你的pathspec,所以它将按原样传递给git)。

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

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

答案 1 :(得分:6)

如果要从所有提交中删除这些文件,请考虑使用filter-branch命令重写整个历史记录。如,

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

答案 2 :(得分:1)

你可以试试这个:

git log --follow *.wmv

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

答案 3 :(得分:0)

是的,就像提到的那样,我认为思考是删除引入它们的提交不会删除blob

请参阅http://progit.org/book/ch9-7.html#removing_objects对该主题和示例的广泛处理

答案 4 :(得分:0)

如果目标是从存储库中删除文件(从而重写历史记录),请使用BFG Repo-Cleaner,例如:

bfg --delete-files '*.wmv' --private --no-blob-protection

如果文件相关,您可以使用Git LFS将其保留在版本控制之下。要migrate(也重写历史记录),您可以执行以下操作:

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'

答案 5 :(得分:0)

这也适用于gitk,使用View / New View / Enter文件和目录来包含,每行一个。

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

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

var rx = /HIDDEN\s+ERROR:\s+Usage\s+of\s+"[^"]*"\s+is\s+not\s+recognized/g;
var str = "TEXT: <HIDDEN ERROR: Usage of \"spouse\" is not recognizedHIDDEN ERROR: Usage\nof \"children\" is not recognizedHIDDEN ERROR: Usage of \"signature\" is\nnot recognizedHIDDEN ERROR: Usage of \"death_cause\" is not\nrecognizedHIDDEN ERROR: Usage of \"parents\" is not recognizedHIDDEN\nERROR: Usage of \"resting_place\" is not recognized>";
str = str.replace(rx, '');
console.log(str);

答案 6 :(得分:0)

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

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

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