В чем разница между остановкой отслеживания и игнорированием файла в git SourceTree? - PullRequest
0 голосов
/ 23 апреля 2019

Когда я только добавляю файл в список игнорирования (это делает «Игнорировать»), он все еще отображается в разделе без изменений, когда в него вносятся изменения.Как я могу правильно игнорировать его, чтобы он больше не отслеживался?

А в чем разница между добавлением файла в список игнорирования и его остановкой?

Запутано.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

«Остановить отслеживание» удаляет файл из индекса.Этот файл не будет включен в следующий коммит.Если файл был включен в предыдущий коммит, git интерпретирует это как инструкцию по удалению файла при переходе от предыдущего коммита к следующему.Если файл не был включен в предыдущий коммит, он просто становится неотслеживаемым (как если бы файл только что был создан, а git об этом еще не было сказано).

«Игнорировать файл» создаетgit игнорирует правило для пути к файлу.Игнорировать правила часто неправильно понимают.Правило игнорирования говорит git: «если вы видите неотслеживаемый файл, путь / имя файла которого совпадают с этим шаблоном, вы должны (по умолчанию) его проигнорировать».Два ключевых момента:

1) Если вы говорите игнорировать отслеживаемый файл (например, тот, который находится в предыдущем коммите), это фактически ничего не делает.(Если вы сделаете это и распакуете файл , это что-то сделает - но, возможно, не то, что вы хотите. Я вернусь к этому.)

2) Хотя пользовательский интерфейс говорит, что вы можетеигнорировать файл , действительно игнорировать правила, применимые к путям.Вы говорите git игнорировать любой неотслеживаемый файл, который он может найти по пути / имени, в настоящее время связанному с этим существующим файлом.

Я предполагаю, что вы, возможно, захотите сделать это игнорировать изменения в файл, сохраняя текущую версию, которая уже есть в истории.Мало того, что ни один из вышеперечисленных вариантов не делает этого, на самом деле для этого есть опция no .(Существует ряд часто предлагаемых обходных путей, но я не рекомендую ни одного из них, поскольку все они имеют плохие побочные эффекты.)

Примечательно, что некоторые люди пробуют прямой путь «игнорировать неработать с отслеживаемыми файлами, поэтому распакуйте файл ".Опять же, как отмечалось выше, это только правильное решение, если вы хотите, чтобы последующие коммиты думали, что вы удалили файл.

Короче говоря, если у вас есть требование сохранить файл какнаходится в ваших коммитах, но нужно вносить локальные изменения в файл (что следует игнорировать), это требование, которое не может быть хорошо поддержано.(Дело не только в том, что git не может это сделать; ни один инструмент не может сделать это хорошо, потому что это противоречивое требование.) Поэтому вам действительно следует сделать шаг назад и посмотреть, как вы можете изменить свой процесс, чтобы не делать этого.

(Наиболее распространенная причина, по которой люди спрашивают - что может или не может быть вашей причиной - это то, что они хотят локально изменить файл конфигурации «на месте» в дереве исходного кода. Если вы выполните поиск по этой проблеме, вы бынайдите несколько постов SO, в которых подробно описаны способы избежать этой проблемы.)

0 голосов
/ 23 апреля 2019

Если файл уже добавлен (например, он является частью ревизии HEAD, ревизии, над которой вы работаете), то файл отслеживается . На этом этапе файл не может быть проигнорирован. Вы можете добавить его к .gitignore, и git будет продолжать сообщать вам, что файл был изменен (если это так). Чтобы вы могли его игнорировать, оно должно быть untracked (если оно уже отслежено, как я уже сказал). Для этого вы можете удалить его из ревизии, сохранив его в рабочем дереве с помощью git rm --cached the-file. Если файл уже находится в .gitignore, то о нем не будет сообщено снова .... по крайней мере, в будущем. Но что произойдет, если вы захотите вернуться к одной из ревизий, в которой еще был файл? Git будет жаловаться. Если вы заставите проверку, что произойдет, если вы вернетесь? Файл пропал! Поэтому иногда лучше переписать историю, если вы хотите полностью избавиться от файла из истории ... все зависит от того, сколько усилий вам придется приложить.

...