Предыдущий ролик Следующий ролик  

Видео урок: Игнорирование отслеживаемых файлов

Git: обучение основам

В этом ролике мы изучим, как сказать Git игнорировать отслеживаемые файлы, это файлы, которые мы уже начали отслеживать, а теперь мы хотим их игнорировать. Когда мы до сих пор рассматривали gitignore, мы, в основном, обращали внимание на игнорирование новых файлов. Итак, нового файла нет в нашем репозитории, мы не хотим его отслеживать, и мы говорим Git, что он должен его отслеживать и не показывать его нам. Но вы должны знать, что Git не будет игнорировать файл, который уже отслеживался до того, даже если правило, было добавлено в файл gitignore, говорящее, что он должен его игнорировать.

Если это наш случай, Git попытается отслеживать файл, и файл сначала должен стать неотслеживаемым. Давайте я покажу, что я имею в виду. Допустим, здесь у меня есть новый файл, tempfile2.txt, я его забрасываю в рабочую директорию. Если я напишу git status, Git скажет мне, что был добавлен этот новый файл. Прежде чем мы добавим для него правило в gitignore, давайте сперва закоммитим его в репозиторий. Пишем git add tempfile2, а затем git commit с сообщением "Adding tempfile2.txt to repo before ignoring it".

Вот файл добавлен в наш репозиторий, git status, рабочая директория чиста, и мы видим, что файл на месте. Мы просто закоммитили файл. Это все, что мы сделали, просто базовый коммит. Теперь Git отслеживает файл, давайте скажем ему, что в дальнейшем мы хотим игнорировать изменения в этом файле. Давайте откроем наш gitignore, если вы помните, он находится прямо здесь, в директории проекта. Мы можем открыть этот файл и отредактировать разными способами, а поскольку у него впереди стоит точка, его не видно здесь из окна, и поэтому все немного хитро.

Я использую командную строку, и я использую nano, это Unix программа, которая позволит мне отредактировать gitignore, и вот прямо здесь под tempfile.txt давайте добавим tempfile2.txt. Ctrl+X, чтобы выйти, Y для Yes, чтобы сохранить изменения, и Return, чтобы оставить имя файла. Мы сказали Git, что он должен его игнорировать, и теперь gitignore, конечно, показан в статусе, потому что он отредактирован и его нужно закоммитить в репозиторий. Но давайте пока что этого не делать.

Давайте перейдем в tempfile2 и внесем изменение. Это второй временный файл. Если мы зайдем сюда, напишем git status, обратите внимание, что хотя мы и сказали Git игнорировать его, он не игнорирует наши изменения, он отслеживает изменения, поскольку это отслеживаемый файл, и Git до сих пор его видит. И не важно, закоммитили ли бы мы сначала gitignore в репозиторий или нет, не из-за этого Git это делает, а потому что он до сих пор отслеживает этот файл. И теперь нам нужно сказать Git, чтобы он перестал его отслеживать.

Один из способов сделать это заключается в том, чтобы просто удалить его, верно? Команда git remove сделает это, git remove tempfile2.txt. Git удалит его из репозитория, и он удалит нашу версию, он сделает и то, и другое. А что если мы не хотим удалять нашу версию? Что если бы это был файл с логами? А что если бы это был набор картинок или файлы Photoshop, которые нам нужны, и мы хотим их оставить, но не хотим их отслеживать? И мы можем даже захотеть оставить их в репозитории, чтобы другие люди могли их скачивать.

Мы просто хотим игнорировать изменения, которые затем будут в них сделаны, верно? И это, конечно, может быть случай с файлом с логами или чем-то подобным. Мы хотим, чтобы любой член команды имел доступ к этому файлу, но не обязательно, что мы хотим отслеживать изменения в этом файле. И здесь мы не будем прописывать просто remove, а remove с опцией cached. То есть, --cached, и она говорит Git удалить этот файл из буфера, а не из репозитория, только из буфера.

И это приведет к тому, что файлы больше не будут отслеживаться. Копия просто будет оставаться в репозитории, и копия будет в рабочей директории. Ее не будет только в буфере. А теперь давайте нажмем Return, Git скажет, что удалил файл, пишу git status, вы видите, что Git говорит, что файл был удален, это коммит, который он делает, чтобы удалить файл. Однако если я вернусь сюда, вы увидите, что файл все еще здесь, он не удален. А теперь давайте добавим наш файл gitignore, вот оба файла тут и их можно закоммитить.

Теперь пишем git commit -m с сообщением "Remove tempfile2.txt from staging index", а затем нажимаем Return. Теперь, если мы напишем git status, мы увидим, что рабочая директория чиста, но он до сих пор присутствует в моей директории. Он никуда не исчез. Внесем в него еще изменения, откроем его, напишем: "These changes will not be tracked anymore".

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