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

Видео урок: Отслеживание пустых директорий

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

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

Сейчас я вам это покажу. Вот я в папке моего проекта. Здесь на моем десктопе есть пустая папка, которая называется pdfs, вы можете создать новую папку или взять эту из файлов для упражнений, я лично просто перетяну эту в активы. Давайте откроем активы, вы видите, что папка pdfs пуста. Все верно, здесь внутри ничего нет, и я могу подтвердить это из командной строки, ls la assets/pdfs/. В общем, здесь ничего нет. Здесь нету даже точки или двух точек. В Unix это ссылка на текущую директорию и ссылка на родительскую директорию.

В общем, здесь нет файлов, это обозначает, что директория абсолютно чиста. Я уже писал здесь git status, и Git мне сказал, что рабочая директория чиста. Давайте попробуем снова, git status, рабочая директория до сих пор чиста. И если в папке появляется файл, и Git начинает внезапно ее отслеживать. Трюк в отслеживании пустых директорий заключается в том, чтобы вставить в них файл. Если вы хотите вставить сюда несколько PDF файлов, да без проблем. Просто вставьте сюда PDF файлы, добавьте PDF файлы в репозиторий, и данная директория будет вставлена сюда в это же время, все будет вставлено вместе.

Но если вы хотите отслеживать пустую директорию, она не может быть абсолютно пустой. В ней должен находиться хоть какой-то файл. Хитрость, которую используют все, заключается в том, чтобы просто вставить сюда легкий маленький файл, так чтобы Git мог его отслеживать, и по соглашению люди называют этот файл либо .gitignore, чтобы он соответствовал файлу gitignore, или же зачастую, наоборот, .gitkeep, как бы говоря, что он должен сохранить эту директорию. В общем, нам нужно вставить маленький файл внутрь pdfs, который называется .gitkeep, и вы можете использовать любой текстовый редактор. Вам на самом деле не нужно вставлять в него никакого контента, вообще никакого, или же вы можете написать какой-нибудь комментарий, что-то типа: "Я хочу оставить этот файл".

На самом деле, это не важно. Этот файл никогда не будет использоваться ничем, кроме Git. Один из способов сделать это из Unix заключается в том, чтобы использовать команду touch. В общем, touch - это способ создать файл, который не существует. Если мы напишем assets/pdfs/.gitkeep, будет создан файл .gitkeep без какого-либо контекста. Это маленький трюк в Unix. Мы сделаем это, а теперь если вы вернемся и напишем ls la assets/pdfs/, вы увидите, что файл .gitkeep находится здесь. Его длина равна 0, внутри ничего нет.

Но файл здесь. Мы его не видим прямо отсюда из десктопа, директория выглядит пустой, но если мы перейдем в Git и спросим его, Git скажет: "о! я вижу эту директорию," а если мы напишем git add assests/pdfs, git status, теперь он скажет: "О! Я нашел файл." Assets/pdfs/.getkeep. Это файл, который он хочет добавить. Давайте продолжим и закоммитим его, итак, git commit и сообщение "Add 'empty' directory with .gitkeep file in it".

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