У меня есть git-репозиторий, который используется только для хранения графических и звуковых файлов, используемых в нескольких проектах. Все они находятся в одном каталоге без подкаталогов. Сейчас я только что создал скрипт для копирования этих ресурсов из другого структурированного каталога с несколькими уровнями подкаталогов.
Теперь я хочу, чтобы git отслеживала только (исходную) иерархическую файловую структуру, а плоский каталог (со всеми файлами в одной стопке) следует игнорировать.
Я добавил целевой каталог в .gitignore, но git все еще отслеживает изменения в нем. Я думал, что если я фиксирую удаление старого файла в целевом каталоге, git может перестать отслеживать новое содержимое (скопированное скриптом), но это не так.
Как заставить git забыть о целевом каталоге?
источник
Ответы:
Эта команда заставит git отследить ваш каталог и все файлы в нем, фактически не удаляя их:
git rm -r --cached <your directory>
-r
Опция вызывает удаление всех файлов в каталоге.--cached
Опция заставляет файлы , которые будут удалены только из индекса GIT, а не вашей рабочей копии. По умолчаниюgit rm <file>
удалил бы<file>
.источник
add -f
либо в вашей ситуации. Как сказал Гордон, это удерживает вас от случайного уничтожения нескольких файлов - хранилище - это главный список, а не gitignore. Это также позволяет вам вручную отслеживать несколько вещей, которые иначе были бы проигнорированы правилом подстановочных знаков, что я нашел полезным.-r
вариант не «вызывает удаление всех файлов в директории» , а скорее через рекурсию в подкаталогах.Если вам нужен отслеживаемый файл (зарегистрирован), но вы не хотите отслеживать дальнейшие изменения файла, сохраняя его в локальном хранилище, а также в удаленном хранилище, это можно сделать с помощью:
После этого любые изменения в этом файле больше не будут отображаться в
git status
.источник
git update-index --no-assume-unchanged dirname/**/*
Для подкаталога с именем
blah/
добавлен в git, оба из следующих, похоже, работают, чтобы игнорировать новые файлы вblah/
. Добавлено в .gitignore:источник
TL; DR, чтобы очистить ваш git-репозиторий и убедиться, что ВСЕ ваши игнорируемые элементы действительно игнорируются:
Примечание: вам не нужно указывать каталог, таким образом вы очищаете весь удаленный репозиторий .
Чтобы пойти дальше, прочитайте это
источник
Не уверен, считается ли это или делает меня плохим человеком, но здесь это идет.
*Generated*
в корневой файл .gitignoredir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Я чувствую себя немного плохо из-за себя ... но на самом деле это работает.
источник
Хорошо, кажется, что вы должны сначала выполнить регистрацию с полностью пустым каталогом (ни старыми, ни новыми файлами), и любые добавленные после этого файлы будут игнорироваться. Если вы удаляете старые файлы, добавляете и новые перед фиксацией, новые добавляются в репозиторий, хотя их следует игнорировать.
По крайней мере, это сработало для меня в этой ситуации. Было бы замечательно, если бы кто-нибудь мог дать больше информации о том, что происходит.
источник