git 1.7.12
Я хочу пометить все файлы в заданном каталоге как неизменные.
1) git update-index --assume-unchaged dir/
дает "Игнорирование пути".
2) git update-index --assume-unchaged dir/*
быстро выходит из строя, потому что он обнаруживает файлы, которые не отслеживаются, поэтому выдает «фатальный: невозможно отметить файл» и завершает работу.
3) Попробуйте создать список файлов для пометки. cd
в нужный каталог, а затем запустите git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
. Это не вызывает сообщения об ошибке, но файлы не помечаются успешно. Первая часть команды git ls-files | tr '\n' ' '
правильно создает список всех файлов, которые я хочу отметить, с разделителями-пробелами. Если я скопирую и вставлю вывод этой команды в командную строку, git update-index
команда будет работать. Что не работает с трубами?
Нет, мне недостаточно добавить dir
в .gitignore. Мне нужно, чтобы эти файлы были в репозитории, но нежелательные изменения будут внесены локально, и их нужно игнорировать, чтобы пользователи могли выполнять опросы.
источник
git ls-files -z
git ls-files -z | xargs -0 git update-index --no-assume-unchanged
, я бы подумал ...git ls-files -z | git update-index -z --stdin
чище.У
find
команды GNU Findutils есть-exec
опция, которая устраняет большую часть хлопот при использованииxargs
, хотя ее синтаксис немного особенный. Однако он отлично справляется с именами файлов с пробелами.Эта команда заставит git предположить, что все файлы в указанном каталоге и под ним не изменились:
Find принимает все аргументы после
-exec
до;
(которых вам нужно избегать, чтобы ваша оболочка не съела их) и запускает его один раз для каждого найденного файла, заменяя{}
(опять же, в одинарных кавычках, чтобы оболочка не съела его) именем найденного файла.Используя
find
критерии соответствия (максимальная глубина рекурсии, независимо от того, является ли соответствие файлом или каталогом, соответствует ли имя файла выражению),-exec
вы можете делать всевозможные мощные вещи.Не уверен насчет других реализаций
find
команды. YMMV.источник
-exec
это стандартный вариант . Вы также можете-exec git update-index --assume-unchanged {} +
(также определено стандартом), который передает команде несколько имен файлов одновременно, уменьшая количество вызовов команды git.Добавьте имя каталога в
.git/info/exclude
. Это работает для неотслеживаемых файлов.источник
Да,
работает только с файлами, а не с каталогами. Думаю, один из более быстрых способов:
источник
cd
, вы можете передать реж как последний аргумент:git ls-files -- $DIR | xargs -l git update-index --assume-unchanged -- $DIR
.