我想在我的代码库中找到添加视频文件的提交。 有没有办法在git中查找这些文件?
例如,假设所有视频的文件名以扩展名.wmv结尾;我想找到介绍这些文件的所有提交,并通过修复或其他东西摆脱它们。
有什么想法吗?
答案 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$)|(^[^\.]+$))'
这将打印出提交哈希,后跟匹配搜索字符串的所有文件名。