git update-index --assume-неизменный в каталоге
Мерзавец 1.7.12
Я хочу пометить все файлы в данном каталоге как предполагаемые без изменений.
1) git update-index --assume-unchaged dir/
дает "Игнорирование пути".
2) git update-index --assume-unchaged dir/*
быстро терпит неудачу, потому что он встретит файлы, которые не отслеживаются, следовательно, он выдает "fatal: Unable to mark file" и завершает работу.
3) Попробуйте создать список файлов для отметки. cd
в нужный каталог, а затем запустите git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
, Это не выдает сообщение об ошибке, но это не успешно помечает файлы. Первая часть команды, git ls-files | tr '\n' ' '
, правильно создает разделенный пробелами список всех файлов, которые я хочу отметить. Если я скопирую и вставлю вывод этой команды в командную строку, то git update-index
команда работает. Что не работает с трубами?
Нет, мне недостаточно добавить dir
к.gitignore. Мне нужно, чтобы эти файлы были в репозитории, но нежелательные изменения будут вноситься локально, и их следует игнорировать, чтобы пользователи могли выполнять извлечения.
4 ответа
git update-index
хочет, чтобы имена файлов были указаны в командной строке, а не в стандартном вводе.
Шаг 1:
cd
в папку, которую вы хотите предположить, не изменяется,
Шаг 2:
Вы можете сделать это:
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
или же
git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged
Хотя, в любом случае, имена файлов с пробелами будут проблематичными. Если у вас есть такие, вы можете использовать это:
git ls-files -z | xargs -0 git update-index --assume-unchanged
Редактировать: встроенный вклад @MatthewScharley относительно git ls-files -z
,
Команды Windows
Примечание. Если вы работаете в Windows, используйте Git Bash для запуска этих команд.
Добавить имя каталога в .git/info/exclude
, Это работает для неотслеживаемых файлов.
find
Команда из GNU Findutils имеет -exec
вариант, который устраняет большую часть хлопот использования xargs
хотя его синтаксис немного особенный. Однако он отлично справляется с именами файлов с пробелами.
Эта команда заставит git предположить, что все файлы в и в указанном каталоге не изменены:
find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;
Find принимает каждый аргумент после -exec
до тех пор ;
(который вы должны избегать, чтобы ваша оболочка не съела его) и запускает его один раз для каждого найденного файла, заменяя его {}
(опять же, одиночные кавычки, чтобы ваша оболочка не сожрала их) с именем найденного файла.
С помощью find
критерии соответствия (максимальная глубина рекурсии, является ли совпадение файлом или каталогом, совпадает ли имя файла с выражением) и -exec
Вы можете делать все что угодно.
Не уверен насчет других реализаций find
команда. YMMV.
Yeap,
git update-index --assume-unchanged
работает только с файлами, а не с каталогами. Я думаю, один из более быстрых способов:
cd dir
ls | xargs -l git update-index --assume-unchanged