git: повторно оформлять файлы после создания фильтра smudge
Ситуация: я только что клонировал репозиторий git, а затем настраиваю фильтр пятен для репо. Есть .gitattributes
файлы, разбросанные по репо, задают фильтр, который следует использовать для файлов при оформлении заказа. Но так как я установил фильтр после проверки (клон), ни один из файлов не был обработан.
Как я могу сказать Git пройти репо, найти все .gitattributes
файлы и обновить (повторно оформить, применить фильтр и т. д.) все файлы, на которых есть грязный фильтр?
2 ответа
Просто перепроверь все.
cd /path/to/your/repo
git stash save
rm .git/index
git checkout HEAD -- "$(git rev-parse --show-toplevel)"
git stash pop
Фильтр пятна будет применен при этой новой проверке.
Обратите внимание, что, как видно из этого ответа, вам нужно удалить индекс, чтобы принудительно запустить фильтр.
Alexander Amelkin комментирует ниже:
Я создал псевдоним
reattr
выполнить все эти шаги, и теперь я счастлив.
reattr = !sh -c "\"git stash save; rm .git/index; git checkout HEAD -- \\\"$(git rev-parse --show-toplevel)\\\"; git stash pop\""
(многострочный для удобства чтения)
reattr = !sh -c "\"git stash save; \
rm .git/index; \
git checkout HEAD -- \\\"$(git rev-parse --show-toplevel)\\\"; \
git stash pop\""
Вы можете удалить индекс Git и позволить Git повторно сканировать его, чтобы узнать об изменениях. Затем вы можете оформить заказ на все файлы, на которых есть грязный фильтр.
# remove Git index
rm .git/index
# rescan index
git reset HEAD -- .
# checkout all the files which have a smudge filter on them
git ls-files --modified | grep -v .gitattributes | awk '{print "git checkout HEAD -- \""$1"\""}' | bash
Примечание. Сохраните незафиксированные изменения до повторной проверки, в противном случае все ваши изменения в этих файлах, применяемых к фильтру пятна, будут отменены.