open-menu-button

Краткий навигатор по git-командам

By: sova

Ещё в колледже мы с друзьями когда разрабатывали свои программы и небольшие игры просто скидывали архив с проектом в ВК когда нужно было поделиться прогрессом. Если проект достаточно маленький, чтобы ты примерно помнил всю кодовую базу и видел различия на глаз — это не большая проблема, но я уже тогда из каждого утюга слышал про Git и предложил перейти на него. Дело шло неважно, т.к. острой необходимости в его использовании не было, так что я написал краткое практическое руководство по git-командам, чтобы ребята подглядывали в него когда нужно сделать коммит. Собственно, это руководство предложено ниже, исправленное и дополненное.

Зачем

Как бы варварски не звучало предложение обмениваться архивами с проектом в ВК, это в целом вполне себе работает. Так зачем же Git? (если абстрагироваться от «все настоящие программисты так делают»)

  • Это намного быстрее чем кидать архивы.
    Git загружает только разницу между локальной версией проекта и серверной. В худшем случае, придется скачать проект целиком, что в целом то же самое, что приходится делать каждый раз, когда тебе скидывают проект архивом, а так, обычно «заплатки различий» которые нужно докачивать очень небольшие.
  • Каждый коммит в git это резервная копия проекта.
    Можно легко откатывать нежелательные изменения, смотреть старые версии проекта и просто смелее экспериментировать не боясь что что-то сломается безвозвратно.
  • git репозиторий — удобное место чтобы собрать кодовую базу проекта в одном месте.
    Если работаешь не один, это очень важно, чтобы все знали где если что можно добыть последнюю версию проекта, и точно знали, что она последняя. Такие маленькие договоренности ускоряют и упрощают работу для всех, снижая пролаг коммуникации, особенно если это хобби-проект и все работают в своем темпе.
  • Развитый инструметарий совместной работы с проектами.
    Облако вроде гугл/яндекс/майл-диска тоже могло бы стать местом, где все файлы проекта заливаются для общего доступа, но git не только быстрее в плане скорости и объемов закачки, но и дает большой потенциал для дальнейшей оптимизации рабочего процесса. Даже если речь об учебном или хобби проекте, git предлагает много фишек «на вырост».

    • Посмотреть что именно поменялось в последней версии построчно? Запросто!
    • Разрабатывать две фичи параллельно без риска что одна фича сломает другую? Есть ветки.
    • Сохранить временную копию проекта, чтобы срочно переключиться на другую фичу не теряя внесенных изменений? Для этого есть специальная команда. Без git пришлось бы делать дубликат папки с проектом и скорее всего, не один.

Как

Сначала, коротко о терминологии, дальше по тексту без нее может быть непонятно о чем речь.

  • Репозиторий — условно говоря, папка под управлением git. Всё, что находится в этой папке попадает в поле зрения git и может быть подключено к отслеживанию версий.
  • Удалённый репозиторий — то же самое но на сервере. Это нужно, чтобы обмениваться данными между участниками проекта. Технически, если работаешь один, можно обойтись и только локальным репозиторием, но обычно, иметь удаленный предпочтительно, хотя бы ради того, чтобы быстро синхронизировать проект между своими собственными устройствами.
  • Коммит — заплатка различий. Создание коммита называется фиксацией изменений. Перед созданием коммита изменения нужно добавить в индекс.
    • На этапе добавления изменений в индекс выбирается какие изменения попадут в коммит. Коммиты нельзя редактировать, а вот убрать из индекса файлы или что то в него добавить пока коммит ещё не создан — можно.
  • Ветка — отдельная цепочка коммитов. В ветки можно добавлять коммиты независимо друг от друга, а потом слить ветки, когда работа над конкретной задачей будет закончена. Если что-то пойдет не по плану, ветку можно оставить до лучших времен и вернуться к ней потом, не вливая сырые изменения в стабильную версию программы.

Установка git

Пользователям Linux устанавливать git обычно не нужно — он входит в базовую поставку системы. Если git у вас все таки нет, скорее всего, вы и без меня знаете что с этим делать. Пользователям Windows следует сделать следующее:

  1. Скачать git с официального сайта (там не так много кнопок, чтобы запутаться)
  2. Установить git следуя инструкциям установщика. Если вы не хотите экзотики, советую использовать настройки по-умолчанию, и везде прожать «далее» — установщик из коробки даёт стабильную и удобную конфигурацию, и редко требуется что-то в ней менять.
  3. Установленный git может быть вызван в любой папке, если нажать ПКМ внутри неё на пустом месте, и выбрать опцию выпадающего меню Git Bash Here или Git GUI Here, для вызова консольного и графического интерфейса соответственно.
    • Если вы предпочитаете GUI — то лучше не мучайте себя Git GUI поставляющимся из коробки, и установите сторонний GUI-клиент. Например, GitHub Desktop и SourceTree для GitHub и BitBucket соответственно. В этой статье будет подразумеваться использование консоли.

Основные команды

Создание и клонирование репозитория

Для начала работы с git, нужно создать новый репозиторий или скачать существующий.

  • Создание нового репозитория протекает в несколько этапов;
    • Создание репозитория командой git init
    • Опционально, но зачастую полезно — привязать сразу к локальному репозиторию соответствующий удалённый. Это делается командой git remote add <псевдоним_удалённого_репозитрия><веб-адрес удалённого репозитория>
Например:
git remote add origin https://moonbutt.science/Linnon/story-dev
  • Скачивание существующего репозитория
    • при помощи команды git clone <веб-адрес> вы скачиваете репозиторий. Если он приватный, то возможно, придётся ввести данные своей учетной записи на том сервере, с которого вы скачиваете проект.
Пример: git clone https://moonbutt.science/Linnon/story-dev

Бинго. У вас последняя версия проекта. Очень удобно.

Фиксация изменений

Это основные команды, которыми вам предстоит пользоваться каждый день.
Как было упомянуто выше, фиксация происходит в 3 этапа:

  • git add <путь_к_файлу/имя файла> — добавление файлов в индекс, т.е. выбор изменений для фиксации
    • обычно, добавлять по одному файлу слишком долго, так что используется просто git add —all ,которая добавляет в индекс все новые файлы и изменения старых.
    • (!) перед введением данной команды рекомендуется ввести команду git status — она покажет текущее состояние репозитория, и позволит вовремя заметить, если в списке изменений присутствуют нежелательные файлы — к примеру, тестовые классы или файлы, которые вы добавили на время тестирования, и забыли удалить
  • git commit — фиксация изменений. Введение команды самой по себе откроет редактор по-умолчанию, где следует ввести название коммита
    • если вы не меняли дефолтный текстовый редактор при установке git, у вас откроется VIM — консольный текстовый редактор. После введения сообщения коммита, чтобы сохранить его и выйти, нужно переключить редактор в командный режим нажав ESC, и затем ввести символы :wq и активировать команду нажав ENTER. Подробнее о других командах Vim — в интернете. Например, тут.
    • если не хотите дружить с Vim (вас можно понять), и у вас короткое сообщение коммита — воспользуйтесь опцией -m, и укажите в аргументах команды текст сообщения в кавычках
Команда примет вид git commit -m «сообщение коммита» это простой и удобный способ.
  • git push <псевдоним_удалённого_репозитория> <ветка> — данная команда отправит ваш коммит на удалённый репозиторий. Возможно, потребуется авторизация, если репозиторий приватный.

Полезное

  • git pull <псевдоним_удалённого_репозитория> <ветка> — загрузит все новые изменения, которых у вас нет из указанного удалённого репозитория, так же одна из наиболее используемых команд
  • git log — история коммитов, листается стрелками на клавиатуре или нажатием ENTER (в зависимости от консоли)
  • git status — упоминалась выше — показывает состояние репозитория, настоятельно рекомендуется при помощи этой команды посматривать, в каком он состоянии, перед тем, как что-то коммитить
  • git checkout <ветка> — переключит вас на другую ветку
    • добавление опции -b создаст новую ветку, и переключит вас на неё, команда примет вид
git checkout -b <имя_новой_ветки>
    • если в аргументах ввести не имя ветки а хэш коммита — вы переключитесь на этот коммит, и ваш репозиторий примет точь в точь тот вид, который был на момет этого коммита. Как чертова машина времени. Хэш коммита можно посмотреть в списке коммитов, использовав git log.
  • git branch <имя> — создаст новую ветку с избранным имеенем. имеет целую россыпь полезных опций
  • git stash — строго говоря, используется для того, чтобы «припрятать» (англ. stash) изменение на потом, чтобы переключить репозиторий на другую, более насущную задачу, но это довольно простой способ избавиться от нежелательных изменений — например, вы экспериментировали, но зашли в тупик, или внесли несколько незначительных изменений, которые теперь мешают вам синхронизироваться с удалённым репозиторием — эта команда приведёт ваш локальный репозиторий в состояние как у последнего коммита
  • git checkout HEAD <filename> — восстановление удалённого локального файла через git, очень полезно
  • git remote -v — выводит список серверов, зарегестрированных для репозитория

Это самые простые и базовые команды git. Его возможности куда шире описанных, но данная простая инструкция не рассчитана на раскрытие его мощи — для этого лучше обратиться к учебнику новичка на официальном сайте, и в интернет.

 

Comments