This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Мини мануал по работе с git'ом
Описание git
git -- консольная утилита, которая используется для контроля версий приложений.
Главный вопрос -- зачем оно нам нужно? Казалось бы, можно завести папочку с версиями проекта и сохранять их в виде архивчика с версией в имени файла. К сожалению, такой подход очень быстро заведет нас в тупик. Скорее всего после первой попытки найти данные о изменении какого либо фрагмента кода. Данный поиск сведется к распаковке каждого архива в обратном порядке их создания и поиске изменений в исследуемом фрагменте.
Это. Очень. Плохо. В первую очередь для вашей психики.
Собственно, тут нам на помощь и приходит git.
Возможности git'а
- Создание "точек сохранения" или же commit'ов как их обычно называют.
- Откат к старым commit'ам.
- Просмотр изменений между commit'ами.
Это основной функционал, который вы будете использовать каждый день, если будете работать программистами в it-компаниях.
К дополнительным возможностям git'a, которые сильно облегчают работу с ним можно отнести следующее:
- Просмотр истории изменений.
- Создание "ответвлений". Т.е. можно сделать ответвление от основной ветки версий проекта, для реализации какой-нибудь новой фичи, а потом влить эту ветку обратно в основную ветку проекта. В результате все изменения файлов из этой ветки "перетекут" в основную.
- Откат к старым commit'ам.
- Синхронизация с удаленными серверами. Т.е. возможность перенести версионирование проекта условно "в интернет". Это фича и позволяет вести огромные проекты в крупных компаниях. Т.к. без неё всё, что было перечисленно выше не вышло бы за пределы вашего локального ПК.
Рассмотрим каждый компонент git'а подробно.
Инициализация git репозитория
Git репозиторий создается коммандой
git init .
После выполнения данной команды в текущей директории будет создана папка .git, в которой и будут храниться все данные нашего репозитория. Нам не надо будет работать с содержимым этой папки напрямую. Всё через консольную команду git. Тем не менее, наличие папки .git -- верный признак наличия гит репозитория.
Индексирование файлов
Т.к. git создает "точки сохранения" вашего проекта, то логично предположить, что нам зачастую надо сохранять не все файлы, а только те, которые относятся именно к проекту. Например, если у нас в проекте есть какие-нибудь модельки машинного обучения, то нам не нужно добавлять в commit'ы файлы параметров этих моделей(Они могут достигать размеров нескольких десятков гигабайт и хранить их изменения в git'е просто не целесообразно).
По этому в git'е есть возможность выделить те файлы, которые надо добавить в commit, а остальные файлы отбросить. Файлы, которые будут добавленны в commit называются индексированными, т.к. лежат в так называемом индексе файлов, подлежащих добавлению в точки сохранения.
Добавить файл в индекс можно, используя следующую комманду:
git add <имя файла>
git add ./someFile.txt
Так же есть возможность добавить все файлы проекта. Для этого в качестве файла надо указать корневую директорию проекта или . если ваш терминал уже открыт в корне проекта:
git add .
Посмотреть файлы добавленные в индекс можно используя команду
git status
Красным цветом будут подсвечены измененные файлы, а зеленым -- измененные файлы, добавленные в индекс.
В основном вы будете использовать команду git add . для добавления всех измененных файлов в индекс, т.к. это намного удобнее, чем перечислять файлы по отдельности. Для того, чтобы указать файлы, которые надо исключить из автоматического индексирования можно в корневой папке проекта создать файл .gitignore, в котором можно перечислить все папки и файлы, которые должны быть исключены из индекса. Например, строка
*.exe
в файле .gitignore приведет к игнорированию всех исполняемых файлов windows во время индексирования
Создание commit'а
Для того чтобы создать точку сохранения всех файлов в индексе используется команда
git commit -m "сообщение"
После флага -m нужно указать в виде сообщения краткую информацию о изменениях, которые вы внесли данным commit'ом. В коммитах также указывается другая полезная информация о изменении. Например, дата и время, имя и почта того, кто сделал данный коммит. К слову, изначально git ничего о вас не знает, поэтому при создании первого коммита попросит вас указать ваше имя и почту, которая будет отображаться в ваших коммитах. Для указания этих данных используются следующие 2 команды:
git config --global user.name "ваше имя"
git config --global user.email "ваша почта"
Работа с ветками(branches)
Вообще, ветка -- это ни что иное как указатель на коммит. Когда вы делаете новый коммит -- активная ветка сдвигается на новый коммит, а старый коммит помечается как предшественник нового коммита. Я это к тому, что везде, где вы видете использвование имени ветки -- можно использовать хеш коммита. Хеши истории коммитов можно посмотреть командой git log.
Просмотреть текущую ветку можно командой
git branch
Будет выведен список со всеми ветками в локальном репозитории и активная ветка будет помечена звездочкой(*)
Для переключения между ветками используется следующая команда:
git checkout <имя ветки, на которую надо перейти>
Для создания новой ветки можно использовать команду:
git checkout -b <имя новой ветки>
Будет создана новая ветка и произведено переключение на неё
Сделав несколько коммитов в новую ветку можно влить все изменения из коммитов в другую ветку. Для этого надо перейти в ту ветку, в которую будут вливаться изменения, и выполнить следующую команду:
git merge <имя ветки, которую мы вливаем в текущую ветку>
При первом использовании слияния веток вам может появится просьба git'а о необходимости указать стратегию слияния. Их существует 3, нам это сейчас не сильно важно: выбирайте первую и всё. При желании сами изучите как они работают.
Важно! При слиянии двух веток может возникнуть ситуация, когда один и тот же файл менялся
в обеих ветках. В этом случае может возникнуть merge conflict(конфликт слияния).
Git банально не знает какую из версий файла надо будет оставить. Поэтому он изменит все такие
файлы таким образом, чтобы в файлах хранились обе версии, разделенные стрелками
>>>>>>>>>>>>>>>>>>>>>>>>
Вам надо будет выбрать какую версию оставить, просто удалив лишнее и повторить слияние
Заключение
В этом небольшом документике были разобраны основные моменты, с которыми вы столкнётесь при работе с git'ом. Последнее замечание:
Читайте, что пишет вам git! Там хоть все по английскому, но решение большинствоа ваших проблем,
которые у вас гарантированно возникнут пока вы не освоитесь с git'ом, станет очевидно после
прочтения вывода программы.