Подтвердить что ты не робот

Найти коммиты, которые изменяют имена файлов, соответствующие шаблону в репозитории GIT

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

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

Любые идеи?

4b9b3361

Ответ 1

вы можете использовать git log с помощью pathspec:

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

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

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

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

Ответ 2

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

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

Ответ 3

Вы можете попробовать следующее:

git log --follow *.wmv

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

Ответ 4

Yup, как уже упоминалось, я думаю, что мышление заключается в том, что удаление коммитов, которые их вводят, не будет удалять blobs

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

Ответ 5

Если целью является удаление файлов из репозитория (таким образом, переписывание истории), используйте 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:[email protected]:8080 \
    '*.wmv'

Чтобы просто перечислить или изучить коммиты, я ссылаюсь на ответ knittl:

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

Ответ 6

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

Но обратите внимание, что вам нужен шаблон, который охватывает раздел пути имени файла, иначе ничего не будет показано.

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

*/backup-script.sh

Ответ 7

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

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

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