«Остановить отслеживание» удаляет файл из индекса.Этот файл не будет включен в следующий коммит.Если файл был включен в предыдущий коммит, git интерпретирует это как инструкцию по удалению файла при переходе от предыдущего коммита к следующему.Если файл не был включен в предыдущий коммит, он просто становится неотслеживаемым (как если бы файл только что был создан, а git об этом еще не было сказано).
«Игнорировать файл» создаетgit игнорирует правило для пути к файлу.Игнорировать правила часто неправильно понимают.Правило игнорирования говорит git: «если вы видите неотслеживаемый файл, путь / имя файла которого совпадают с этим шаблоном, вы должны (по умолчанию) его проигнорировать».Два ключевых момента:
1) Если вы говорите игнорировать отслеживаемый файл (например, тот, который находится в предыдущем коммите), это фактически ничего не делает.(Если вы сделаете это и распакуете файл , это что-то сделает - но, возможно, не то, что вы хотите. Я вернусь к этому.)
2) Хотя пользовательский интерфейс говорит, что вы можетеигнорировать файл , действительно игнорировать правила, применимые к путям.Вы говорите git игнорировать любой неотслеживаемый файл, который он может найти по пути / имени, в настоящее время связанному с этим существующим файлом.
Я предполагаю, что вы, возможно, захотите сделать это игнорировать изменения в файл, сохраняя текущую версию, которая уже есть в истории.Мало того, что ни один из вышеперечисленных вариантов не делает этого, на самом деле для этого есть опция no .(Существует ряд часто предлагаемых обходных путей, но я не рекомендую ни одного из них, поскольку все они имеют плохие побочные эффекты.)
Примечательно, что некоторые люди пробуют прямой путь «игнорировать неработать с отслеживаемыми файлами, поэтому распакуйте файл ".Опять же, как отмечалось выше, это только правильное решение, если вы хотите, чтобы последующие коммиты думали, что вы удалили файл.
Короче говоря, если у вас есть требование сохранить файл какнаходится в ваших коммитах, но нужно вносить локальные изменения в файл (что следует игнорировать), это требование, которое не может быть хорошо поддержано.(Дело не только в том, что git не может это сделать; ни один инструмент не может сделать это хорошо, потому что это противоречивое требование.) Поэтому вам действительно следует сделать шаг назад и посмотреть, как вы можете изменить свой процесс, чтобы не делать этого.
(Наиболее распространенная причина, по которой люди спрашивают - что может или не может быть вашей причиной - это то, что они хотят локально изменить файл конфигурации «на месте» в дереве исходного кода. Если вы выполните поиск по этой проблеме, вы бынайдите несколько постов SO, в которых подробно описаны способы избежать этой проблемы.)