Игнорирование содержимого уже зарегистрированного каталога?

У меня есть репозиторий git, который используется только для хранения графических и звуковых файлов, используемых в нескольких проектах. Все они находятся в одном каталоге без подкаталогов. Теперь я просто создал script для копирования этих активов из другого структурированного каталога с несколькими уровнями подкаталогов.

Теперь я хочу, чтобы иерархическая структура файла (source) отслеживалась с помощью git, и (целевой) плоский каталог (со всеми файлами в одной стопке) должен быть проигнорирован.

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

Как сделать git забыть о целевом каталоге?

Ответ 1

Эта команда заставит git отследить ваш каталог и все файлы под ним, не удалив их фактически:

git rm -r --cached <your directory>

Параметр -r вызывает удаление всех файлов под вашим каталогом.

Опция --cached заставляет файлы удаляться только из индекса git, а не из вашей рабочей копии. По умолчанию git rm <file> удалит <file>.

Ответ 2

Если вам нужно иметь отслеживаемый файл (отмечен), но не хотите отслеживать дальнейшие изменения файла, сохраняя его в локальном репозитории, а также в удаленном репозитории, это можно сделать с помощью

git update-index --assume-unchanged path/to/file.txt

После этого любые изменения в этом файле больше не будут отображаться в git status.

Ответ 3

Для подкаталога с именем blah/, добавленного в git, оба из них, похоже, работают, чтобы игнорировать новые файлы в blah/. Добавлено в .gitignore:

blah 
blah/*

Ответ 4

Хорошо, вам сначала нужно выполнить регистрацию с полностью пустым каталогом (ни старыми, ни новыми файлами), а любые файлы, добавленные после этого, будут проигнорированы. Если вы удалите старые файлы add и новые, прежде чем совершать, новые будут добавлены в репо, хотя их следует игнорировать.

По крайней мере, это сработало для меня в этой ситуации. Было бы здорово, если бы кто-нибудь мог лучше понять, что происходит.