Подтвердить что ты не робот

Git удалить файл из репозитория, но оставить его в файловой системе

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

Я пробовал следовать

git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD

но это удаляет файл из файловой системы, что нежелательно.

4b9b3361

Ответ 1

Просто:

git rm --cached file [file ...]

Конечно, вам нужно убедиться, что файлы-нарушители добавлены в ваш .gitignore, чтобы они не сразу подтверждались.

Ответ 2

Если вы хотите сохранить файл в репозитории, вы можете использовать:
git update-index --assume-unchanged <fileName>

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

Ответ 3

Использование команды git rm --cached опасно, поскольку она по-прежнему обрабатывается как "удаление", отправляемое в удаленный репозиторий. Поэтому, когда вы (или кто-то еще) извлекаете данные из другого экземпляра хранилища, он удалит файл, который вы хотели игнорировать!

Правильный способ заставить git забыть о файле задокументирован здесь GitHub.

Я рекомендую прочитать документацию, но в основном:

git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

просто замените full/path/to/file на полный путь к файлу. Убедитесь, что вы добавили файл в свой .gitignore.

Вам также нужно (временно) разрешить не-ускоренные пересылки в ваш репозиторий, так как вы изменяете свою историю git.

Ответ 4

Завершите и запустите git clean для каждой ветки.

git -clean - удалить необработанные файлы из рабочего дерева

Очищает рабочее дерево путем рекурсивного удаления файлов, которые не находятся под управлением версиями, начиная с текущего каталога.

https://git-scm.com/docs/git-clean