Краткий навигатор по git-командам
By: sovaЕщё в колледже мы с друзьями когда разрабатывали свои программы и небольшие игры просто скидывали архив с проектом в ВК когда нужно было поделиться прогрессом. Если проект достаточно маленький, чтобы ты примерно помнил всю кодовую базу и видел различия на глаз — это не большая проблема, но я уже тогда из каждого утюга слышал про Git и предложил перейти на него. Дело шло неважно, т.к. острой необходимости в его использовании не было, так что я написал краткое практическое руководство по git-командам, чтобы ребята подглядывали в него когда нужно сделать коммит. Собственно, это руководство предложено ниже, исправленное и дополненное.
Зачем
Как бы варварски не звучало предложение обмениваться архивами с проектом в ВК, это в целом вполне себе работает. Так зачем же Git? (если абстрагироваться от «все настоящие программисты так делают»)
- Это намного быстрее чем кидать архивы.
Git загружает только разницу между локальной версией проекта и серверной. В худшем случае, придется скачать проект целиком, что в целом то же самое, что приходится делать каждый раз, когда тебе скидывают проект архивом, а так, обычно «заплатки различий» которые нужно докачивать очень небольшие. - Каждый коммит в git это резервная копия проекта.
Можно легко откатывать нежелательные изменения, смотреть старые версии проекта и просто смелее экспериментировать не боясь что что-то сломается безвозвратно. - git репозиторий — удобное место чтобы собрать кодовую базу проекта в одном месте.
Если работаешь не один, это очень важно, чтобы все знали где если что можно добыть последнюю версию проекта, и точно знали, что она последняя. Такие маленькие договоренности ускоряют и упрощают работу для всех, снижая пролаг коммуникации, особенно если это хобби-проект и все работают в своем темпе. - Развитый инструметарий совместной работы с проектами.
Облако вроде гугл/яндекс/майл-диска тоже могло бы стать местом, где все файлы проекта заливаются для общего доступа, но git не только быстрее в плане скорости и объемов закачки, но и дает большой потенциал для дальнейшей оптимизации рабочего процесса. Даже если речь об учебном или хобби проекте, git предлагает много фишек «на вырост».- Посмотреть что именно поменялось в последней версии построчно? Запросто!
- Разрабатывать две фичи параллельно без риска что одна фича сломает другую? Есть ветки.
- Сохранить временную копию проекта, чтобы срочно переключиться на другую фичу не теряя внесенных изменений? Для этого есть специальная команда. Без git пришлось бы делать дубликат папки с проектом и скорее всего, не один.
Как
Сначала, коротко о терминологии, дальше по тексту без нее может быть непонятно о чем речь.
- Репозиторий — условно говоря, папка под управлением git. Всё, что находится в этой папке попадает в поле зрения git и может быть подключено к отслеживанию версий.
- Удалённый репозиторий — то же самое но на сервере. Это нужно, чтобы обмениваться данными между участниками проекта. Технически, если работаешь один, можно обойтись и только локальным репозиторием, но обычно, иметь удаленный предпочтительно, хотя бы ради того, чтобы быстро синхронизировать проект между своими собственными устройствами.
- Коммит — заплатка различий. Создание коммита называется фиксацией изменений. Перед созданием коммита изменения нужно добавить в индекс.
- На этапе добавления изменений в индекс выбирается какие изменения попадут в коммит. Коммиты нельзя редактировать, а вот убрать из индекса файлы или что то в него добавить пока коммит ещё не создан — можно.
- Ветка — отдельная цепочка коммитов. В ветки можно добавлять коммиты независимо друг от друга, а потом слить ветки, когда работа над конкретной задачей будет закончена. Если что-то пойдет не по плану, ветку можно оставить до лучших времен и вернуться к ней потом, не вливая сырые изменения в стабильную версию программы.
Установка git
Пользователям Linux устанавливать git обычно не нужно — он входит в базовую поставку системы. Если git у вас все таки нет, скорее всего, вы и без меня знаете что с этим делать. Пользователям Windows следует сделать следующее:
- Скачать git с официального сайта (там не так много кнопок, чтобы запутаться)
- Установить git следуя инструкциям установщика. Если вы не хотите экзотики, советую использовать настройки по-умолчанию, и везде прожать «далее» — установщик из коробки даёт стабильную и удобную конфигурацию, и редко требуется что-то в ней менять.
- Установленный git может быть вызван в любой папке, если нажать ПКМ внутри неё на пустом месте, и выбрать опцию выпадающего меню Git Bash Here или Git GUI Here, для вызова консольного и графического интерфейса соответственно.
- Если вы предпочитаете GUI — то лучше не мучайте себя Git GUI поставляющимся из коробки, и установите сторонний GUI-клиент. Например, GitHub Desktop и SourceTree для GitHub и BitBucket соответственно. В этой статье будет подразумеваться использование консоли.
Основные команды
Создание и клонирование репозитория
Для начала работы с git, нужно создать новый репозиторий или скачать существующий.
- Создание нового репозитория протекает в несколько этапов;
- Создание репозитория командой git init
- Опционально, но зачастую полезно — привязать сразу к локальному репозиторию соответствующий удалённый. Это делается командой git remote add <псевдоним_удалённого_репозитрия><веб-адрес удалённого репозитория>
- Скачивание существующего репозитория
- при помощи команды git clone <веб-адрес> вы скачиваете репозиторий. Если он приватный, то возможно, придётся ввести данные своей учетной записи на том сервере, с которого вы скачиваете проект.
Бинго. У вас последняя версия проекта. Очень удобно.
Фиксация изменений
Это основные команды, которыми вам предстоит пользоваться каждый день.
Как было упомянуто выше, фиксация происходит в 3 этапа:
- git add <путь_к_файлу/имя файла> — добавление файлов в индекс, т.е. выбор изменений для фиксации
- обычно, добавлять по одному файлу слишком долго, так что используется просто git add —all ,которая добавляет в индекс все новые файлы и изменения старых.
- (!) перед введением данной команды рекомендуется ввести команду git status — она покажет текущее состояние репозитория, и позволит вовремя заметить, если в списке изменений присутствуют нежелательные файлы — к примеру, тестовые классы или файлы, которые вы добавили на время тестирования, и забыли удалить
- git commit — фиксация изменений. Введение команды самой по себе откроет редактор по-умолчанию, где следует ввести название коммита
- если вы не меняли дефолтный текстовый редактор при установке git, у вас откроется VIM — консольный текстовый редактор. После введения сообщения коммита, чтобы сохранить его и выйти, нужно переключить редактор в командный режим нажав ESC, и затем ввести символы :wq и активировать команду нажав ENTER. Подробнее о других командах Vim — в интернете. Например, тут.
- если не хотите дружить с Vim (вас можно понять), и у вас короткое сообщение коммита — воспользуйтесь опцией -m, и укажите в аргументах команды текст сообщения в кавычках
- git push <псевдоним_удалённого_репозитория> <ветка> — данная команда отправит ваш коммит на удалённый репозиторий. Возможно, потребуется авторизация, если репозиторий приватный.
Полезное
- git pull <псевдоним_удалённого_репозитория> <ветка> — загрузит все новые изменения, которых у вас нет из указанного удалённого репозитория, так же одна из наиболее используемых команд
- git log — история коммитов, листается стрелками на клавиатуре или нажатием ENTER (в зависимости от консоли)
- git status — упоминалась выше — показывает состояние репозитория, настоятельно рекомендуется при помощи этой команды посматривать, в каком он состоянии, перед тем, как что-то коммитить
- git checkout <ветка> — переключит вас на другую ветку
- добавление опции -b создаст новую ветку, и переключит вас на неё, команда примет вид
-
- если в аргументах ввести не имя ветки а хэш коммита — вы переключитесь на этот коммит, и ваш репозиторий примет точь в точь тот вид, который был на момет этого коммита. Как чертова машина времени. Хэш коммита можно посмотреть в списке коммитов, использовав git log.
- git branch <имя> — создаст новую ветку с избранным имеенем. имеет целую россыпь полезных опций
- git stash — строго говоря, используется для того, чтобы «припрятать» (англ. stash) изменение на потом, чтобы переключить репозиторий на другую, более насущную задачу, но это довольно простой способ избавиться от нежелательных изменений — например, вы экспериментировали, но зашли в тупик, или внесли несколько незначительных изменений, которые теперь мешают вам синхронизироваться с удалённым репозиторием — эта команда приведёт ваш локальный репозиторий в состояние как у последнего коммита
- git checkout HEAD <filename> — восстановление удалённого локального файла через git, очень полезно
- git remote -v — выводит список серверов, зарегестрированных для репозитория
Это самые простые и базовые команды git. Его возможности куда шире описанных, но данная простая инструкция не рассчитана на раскрытие его мощи — для этого лучше обратиться к учебнику новичка на официальном сайте, и в интернет.