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

Как игнорировать файл, который уже установлен?

Ранее моим файлом .gitignore было следующее:

...
config/database.yml
.DS_Store

Позже я создал файл app_config.yml в каталоге конфигурации и зафиксировал его.

Теперь я понял, что мне не нужен файл app_config.yml в репозитории git. И я изменил файл .gitignore:

...
config/app_config.yml
config/database.yml
.DS_Store

Теперь, когда я фиксирую, этот app_config.yml файл все еще находится в моем репо. Я хочу удалить этот файл из своего репо. Как я могу это сделать?

4b9b3361

Ответ 1

Как упоминалось в " игнорирование не удаляет файл"
(следующая цитата - отличная статья от Ника Каранто,
в своем блоге git готовый "learn git по одному фиксации за раз" ):

Когда вы сообщаете git игнорировать файлы, он собирается прекратить просмотр изменений для этого файла и ничего больше.
Это означает, что история все равно будет помнить файл и иметь его
.

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

git rm --cached <file>

Однако это все равно сохранит файл в истории.

Если вы действительно хотите удалить его из истории, у вас действительно есть два варианта:

  • переписать ваши репозитории, или
  • начало.

Оба варианта действительно сосут, и это по уважительной причине: git пытается не потерять ваши данные.
Как и при перезагрузке, git заставляет вас думать об этих вариантах, поскольку они являются деструктивными операциями.

Если вы действительно хотите удалить файл из истории, git filter-branch - это ручная пила, которую вы ищете.
Определенно прочитайте его manpage, прежде чем использовать его, поскольку он будет буквально переписывать ваши проекты. Это действительно отличный инструмент для некоторых действий и может делать всевозможные вещи, такие как полное удаление авторов, которые обязывают перемещать корневую папку проекта. Команда для удаления файла из всех ревизий:

git filter-branch --index-filter 'git rm --cached <file>' HEAD

Это действие может быть полезно, когда вам нужно выдуть конфиденциальную или конфиденциальную информацию, которая могла быть помещена в ваш репозиторий