Почему .gitignore перестает работать? Всегда останавливается после нескольких коммитов - PullRequest
0 голосов
/ 04 ноября 2018

Так что мой .gitignore просто в какой-то момент просто перестает работать должным образом и показывает мне изменения в каталогах, которые я хочу игнорировать.

  • да, я сохраняю его как ANSI
  • без дополнительных символов в конце файла
  • .gitinore находится в корневом каталоге рабочего дерева
  • Я прочитал всю информацию о этом *** решении :

    git rm -r --cached. мерзавец добавить. git commit -m "фиксированные неотслеживаемые файлы"

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

Проблема в том, что когда я передаю этот коммит на сервер, он удаляет все игнорируемые вещи! Не то чтобы он просто игнорирует его, он удаляет файлы и каталоги с сервера, поэтому проект становится бесполезным ...

По всему Интернету это решение кажется единственным для поврежденного .gitignore, но это не так, поскольку он удаляет файлы и каталоги, которые не должны быть удалены. Это глупо, такая глупая ошибка должна быть устранена давным-давно ...

edit: это происходит по разным путям или файлам, когда вручную или с помощью программного обеспечения что-то добавляется в .gitignore - размещать пути gitignore, которые сломались, бессмысленно. <- это ошибка, о которой я упоминал, а не то, что я запускаю некоторые команды ... </p>

1 Ответ

0 голосов
/ 04 ноября 2018

.gitignore не удаляет ничего на вашем сервере. Вы сделали это!

Прочтите ваш вопрос еще раз. Вы запустили:

git rm -r --cached .
git add .
git commit

Первая команда говорит Git удалить все из индекса. В основном он готовит пустое рабочее дерево как следующий коммит.

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

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

Это происходит потому, что это цель .gitignore: он сообщает Git, какие файлы не отслеживать (больше).

Поскольку они отслеживались в прошлом, файлы не удаляются из хранилища, они просто отсутствуют в последнем коммите (и во всех будущих коммитах). Вы можете восстановить их после запуска git pull, запустив:

git checkout <commit_id> -- <file_path>

где <commit_id> - это хэш последнего коммита, который содержал файлы (непосредственно перед тем, как вы добавили их имена к .gitignore), а <file_path> - путь к одному игнорируемому файлу, который вы хотите получить. Повторите для каждого игнорируемого файла.

...