Найти коммиты, которые изменяют имена файлов в соответствии с шаблоном в GIT-хранилище - PullRequest
28 голосов
/ 27 июня 2011

Я хотел бы найти коммиты в моей кодовой базе, которые добавляют видео файлы, чтобы выбросить их.Есть ли способ найти эти файлы в git?

Например, допустим, у всех видео есть имя файла, заканчивающееся расширением .wmv;Я хотел бы найти все коммиты, представляющие эти файлы, и избавиться от них с помощью исправления или чего-то подобного.

Есть идеи?

Ответы [ 7 ]

34 голосов
/ 27 июня 2011

вы можете использовать git log с указанием пути:

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

, это даст вам все коммиты, которые вносят изменения в файлы .wmv.да, это также сойдет в подкаталоги (но вы должны окружить свой путь к файлу одинарными кавычками, чтобы он передавался как есть).

, если вас интересуют только хеши коммитов (сценарии и т. д.)используйте оборудование git rev-list напрямую:

git rev-list --all -- '*.wmv'
6 голосов
/ 27 июня 2011

Если вы хотите удалить эти файлы из всех ваших коммитов, попробуйте переписать всю историю с помощью команды filter-branch. Например.,

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD
1 голос
/ 01 апреля 2017

Вы можете попробовать это:

git log --follow *.wmv

здесь будут перечислены все коммиты (с хешем), которые изменили файлы wmv.

0 голосов
/ 05 июня 2019

Чтобы просто просмотреть хеши коммитов и соответствующие имена файлов для каждого коммита, вы можете использовать:

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

Это выведет хеш коммита, за которым следуют любые имена файлов, соответствующие строке поиска.

0 голосов
/ 16 марта 2017

Это также может работать в gitk, используя View / New View / Enter для ввода файлов и каталогов, по одному на строку.

Но учтите, что вам нужен подстановочный знак, закрывающий раздел пути имени файла, иначе ничего не будет отображаться.

например, если у вас был файл с именем backup-script.sh, с разным сроком действия (!), Появляющийся в разных местах дерева файлов, и вы хотите просмотреть все версии, то вы должны указать:

*/backup-script.sh
0 голосов
/ 20 февраля 2017

Если целью является удаление файлов из хранилища (таким образом, переписывая историю), используйте BFG Repo-Cleaner , например ::

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

Если файлы актуальны, вы можете держать их под контролем версий, используя Git LFS . Чтобы мигрировать (также переписывая историю), вы делаете что-то вроде:

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'
0 голосов
/ 27 июня 2011

Да, как уже упоминалось, я думаю, что идея состоит в том, что удаление коммитов, которые их вводят, не приведет к удалению BLOB-объектов

См. http://progit.org/book/ch9-7.html#removing_objects для подробного изучения предмета и примеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...