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

Видео урок: Исследование ветвей дерева

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

В этом ролике мы применим то, что мы изучили в последнем ролике насчет обращения к коммитам, и мы будем использовать это, чтобы иметь возможность посмотреть на крону дерева. Помните, я говорил вам, что дерево похоже на директорию файловой системы. Если я под Unix и хочу получить список текущих файлов, состоящих в директории, в которой я сейчас нахожусь, я использую команду ls, ls -la - это набор опций, которые форматируют список, и он предстает симпатичным вертикальным списком со всеми именами файлов, включая имена файлов, которые начинаются с точки, и все на своих местах.

Под Windows вы можете сделать нечто подобное при помощи команды dir, но я хочу обратить ваше внимание на ls в Unix, потому что в Git это работает очень схожим образом. Чтобы сделать список того, что есть в дереве, мы используем git ls-tree, а затем мы передаем tree-ish. По факту, прежде чем мы это сделаем, давайте посмотрим на документацию в Помощи, где сказано, как это используется, здесь сказано - git ls-tree, это набор опций, которые мы можем передать, а после этого tree-ish. Вот и все. Я ничего не приукрашиваю. Это такое слово, и это ссылка на дерево.

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

Вы можете поиграть и попробовать разные tree-ish, давайте напишем git ls-tree master. И выделено будет то же самое, потому что на данный момент чекаут был сделан для основного бранча, HEAD указывает на его верхушку, мы получим тот же результат. Давайте посмотрим в директорию, мы можем передать после этого путь к файлу, итак, git ls-tree master, и давайте запросим активы при помощи слэша. То есть контекст активной директории, и вот мы видим файлы, находящиеся внутри директории.

Давайте вернемся назад на один коммит. Я не знаю, помните ли вы, но предыдущий коммит был тогда, когда мы создали папку pdfs, когда мы ее добавили. Если вы сделали еще коммиты, тогда вы должны вернуться еще дальше, а предыдущий коммит покажет нам директорию в ее предшествующем состоянии. В предыдущем коммите не было папки pdfs, в следующем коммите уже есть папка pdfs. Я хочу вам еще кое-что показать, обратите внимание на эти записи справа, они говорят вам, что элемент является tree или blob. blob - это файл. Это может быть любой вид файла, который здесь сохраняется.

Это может быть текстовый файл, рисунок, все, что угодно, они все сохраняются как blob. Если это не blob, тогда это tree, и угадайте, что такое tree? tree - это директория. И вот, мы внутри tree, потому что у нас есть tree-ish, который указывает на tree, и внутри этого tree есть другие tree. У этого tree есть номер объекта, он тоже присутствует. Мы можем взять первую его часть, скопировать ее, а затем можем написать git ls-tree и передать этот SHA, это tree-ish, который указывает на него, и смотрите, что он нам дает.

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