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

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

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

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

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

Комментарии к вопросу (2)
Решение

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

git rm -r --cached.

Опция -r приводит к удалению всех файлов под вашей директорией.

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

Комментарии (9)

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

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

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

Комментарии (4)

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

blah 
blah/*
Комментарии (1)

Не уверен, если это считается или делает меня плохим человеком, но здесь оно идет.

  1. Я добавил *автоматически* к корню .файл гитюдного
  2. Я отправил файлы, которые я хочу сохранить как GeneratedFile.Что угодно.внешн.CheckedIn
  3. Я сделал крюк Git на пост кассе, чтобы вызвать скрипт PowerShell этим:

реж *.CheckedIn -рекурсия | %{ копия $_.Полное имя " и$($_.Полное имя) и".Заменить (на"CheckedIn" и" Ну и") -ЕА результат}

Я чувствую себя немного плохо о себе... но это на самом деле работает.

Комментарии (0)

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

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

Комментарии (2)