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

Видео урок: Использование файлов .gitignore

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

В предыдущих главах мы видели, что Git отлично отмечает новые файлы, а также изменения в существующих файлах в нашей рабочей директории. По факту, как только мы добавляем новый файл в рабочую директорию, Git отмечает это и добавляет его к списку неотслеживаемых файлов. Например, если я возьму файл tempfile.txt и вставлю его в директорию проекта, а затем напишу git status, то Git сразу же распознает его как неотслеживаемый файл. Но что если на самом деле это временный файл, который нам в общем-то не важен, или что если это файл с логами, который постоянно меняется, Git будет постоянно нас заставлять коммитить эти изменения в репозиторий. Вместо этого нам нужен способ сказать Git просто игнорировать такие файлы, и это мы изучим в данной главе.

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

Мы можем использовать звездочку, вопросительный знак, символы, заключенные в скобки, набор символов, или диапазон, например, 0-9. На самом деле все это довольно лимитировано, у нас есть некоторые базовые групповые символы, которые мы можем использовать. Мы также можем сделать для выражений отрицание, вставив в них восклицательный знак. Например, мы можем прописать, что нужно игнорировать любой файл, который заканчивается на .php. Мы используем звездочку для одного или более символов, то есть один или более символов, которые заканчиваются на .php, будут игнорированы, но не нужно игнорировать index.php.

Не позволяйте этому сбить вас с толку этим видом двойного отрицания, мы говорим о том, чтобы не игнорировать что-то, то есть это будет отслеживаться. То есть файлы, которые заканчиваются на .php, не будут отслеживаться, но index.php будет отслеживаться. И вы можете сказать, что нужно игнорировать все файлы в директории, просто поставив в конце слэш, и это говорит о том, что все файлы в данной директории должны быть проигнорированы. Если вы хотите добавить в файл комментарии, в начале нужно поставить знак хэша, и пустые строки будут, в основном, пропущены.

Давайте попробуем создать файл .gitignore. Файл .gitignore можно создать разными способами. Можно просто открыть текстовый редактор и создать его. Но я считаю, что поскольку впереди стоит точка, и поэтому данный файл сложно увидеть откуда-то, кроме командной строки, лучше всего создать этот файл из командной строки. Итак, я использую Unix команду nano, которая покажет текстовый редактор, и я могу его использовать, чтобы отредактировать это. Если вы делаете это под Windows, даже если вы, возможно, используете среду, схожую с Unix, у вас все же не будет доступа к программе nano. Вы сами можете попробовать и посмотреть, будет ли все работать.

Но если это не работает, тогда вам нужно использовать другой текстовый редактор, и Notepad - это, возможно, самый простой и доступный для Windows, это базовый текстовый редактор здесь, и вы можете найти его в ваших приложениях, а затем просто сохраните файл как .gitignore и убедитесь, что в поле Save As type стоит All files, а затем убедитесь, что в конце файла нет расширения, просто .gitignore без ничего после него, а затем сохраните этот файл в директории Explore California. А поскольку я под Unix, у меня есть доступ к nano, я прописываю nano, а затем .gitignore. Тогда будет создан новый файл, который называется gitignore, в директории, в которой я прямо сейчас нахожусь, это директория моего проекта, так что давайте создадим здесь этот новый файл. И давайте начнем с того, что вставим в него то, что мы хотим игнорировать tempfile.txt, и вы видите, он говорит - Exit - вот этот символ здесь, за которым следует X, это клавиша Ctrl, то есть Ctlr+X, мы выходим, сохраняем изменения, набираем Y для Yes, имя файла gitignore, нажимаем Return, чтобы принять это.

А теперь, если мы наберем ls la, мы увидим, что файл gitignore был добавлен. Пишем теперь git status, и вы видите, что временный файл больше здесь не перечислен. Таким образом, временный файл - это файл, который не отслеживается. Однако, у нас есть новый файл, и это gitignore. Не игнорируйте этот файл - или не говорите Git, чтобы он его игнорировал - мы закоммитим этот файл в репозиторий. Мы хотим, чтобы он был включен в проект, это фал gitignore проекта, это файл, который показан в проекте, и все члены команды могут добавить в него то, что должно быть проигнорировано, то есть мы всегда включаем его в проект и коммитим.

И прежде чем мы его закоммитим, давайте попробуем еще кое-что, nano, снова открываем gitignore. Здесь я внесу изменения и буду использовать звездочку, то есть будет включено все, что является .txt. И когда я это сделаю, Git будет игнорировать не только один файл, но и любой другой файл в этой директории, который заканчивается на .txt. Все .html файлы будут отслеживаться, давайте нажмем Ctrl+X, чтобы сохранить изменения, пишем Y и нажимаем Return, произойдет сохранение, снова git status, и вы видите, что временный файл все еще игнорируется.

Если вы не хотите использовать то, что есть в gitignore, вы можете вставить в начале знак хэша, который сделает всё комментарием, верно? Комментарии так и делаются. Теперь я его снова сохраняю и пишу git status. Теперь правило больше не действует, Git говорит, что видит два файла, файл gitignore и временный файл. Все верно! До коммитов давайте добавим в него несколько записей, чтобы понять, как все работает. Единственный файл, который мы дейсвительно хотим игнорировать на данный момент, это временный файл, давайте напишем tempfile.txt и добавим еще несколько.

В следующем ролике мы поговорим и некоторых вещах, которые вы можете игнорировать, но сейчас я вам дам несколько примеров. Прописываем файл .DS_Store, это файл, представленный на Macintosh, и его использует операционная система. Мы говорим игнорировать все файлы, которые заканчиваются на .zip и .gz. Это заархивированные файлы, и, допустим, файлы с логами. Предположим, у нас есть директория, которая называется log, и все в этой директории, что заканчивается на .log, мы будем игнорировать. В дополнение к этому, если мы используем log rotate для наших файлов с логами, тогда в конце будет добавлено число. Так что все, что с цифрами на конце, также будет проигнорировано.

Например, в нашей директории есть также файлы Photoshop, которые мы использовали, чтобы создать рисунки. Мы можем сказать, что нужно игнорировать все файлы Photoshop, которые здесь находятся. Допустим, у нас есть несколько видео, мы можем сказать ему игнорировать все видео, но предположим, есть несколько видео, которые нам нужны. Это видео, которые мы хотим отслеживать. Говорим не игнорировать videos/tour_*.mp4. Так что все, что начинается с tour_ и заканчивается на .mp4 в директории videos, все еще будет отслеживаться.

Отлично, теперь вы имеете некоторое представление о том, как работает этот файл. А теперь вот вам мой вопрос: будет ли игнорироваться log/archive/access.log? Посмотрите вот сюда и решите, будет ли это игнорироваться или все же нет. Ответ - нет, не будет. Это применяется только к файлам. Эти символы используются только в частях имен файлов, они не включают archive или слэш в начале.

Так что если у вас есть папки внутри папок, будьте здесь осторожны. Теперь, когда мы завершили работу с файлом, нажимаем Ctrl+X, чтобы выйти, Y, чтобы сохранить изменения, и Return, чтобы сохранить фал под тем же именем. Снова пишем git status, очищаю экран, и мы видим наш файл gitignore, теперь давайте добавим его в наш репозиторий, git add .gitignore, а затем git commit -m "Add .gitignore file". Вот и все.

Пишем git status, и мы не видим его, но вы видите, что наш tempfile.txt все еще здесь. Он просто игнорируется.