Git для самых маленьких. От первой команды до настройки ssh

Жизнь человека начинается со слова "мама".

Дорогой читатель, твой путь начнется со слова "git".

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

Пролог

В этой статье я решил объединить полную первоначальную настройку SSH и базовые команды, которые помогут быстро начать работать с git. Постараюсь объяснять всё максимально простым языком!

Я пропускаю установку git на пк, потому что в зависимости от системы это либо протыкать много раз "далее", либо установить одной командой. Моя рекомендация в случае в Windows: при установке включить Windows Explorer Integration, т.к. это позволит быстро открывать git в любой папке.
Так выглядит пункт, который нужно отметить галочкой

Так выглядит на практике то, что мы включили выше:

Для дальнейшей работы понадобится аккаунт на GitHub, имы будем использовать почту, которая была указана при регистрации или в качестве дополнительной в аккаунте.

Настройка

Теперь начнем с момента, когда уже все установлено, чтобы настроить и начать работу.

Я буду показывать на примере git bash из Windows, т.к. большинство начинающих пользователей git используют именно эту систему, поэтому читателю будет проще следовать статье.

В папке пользователя я создал папку TestGit, перешел в нее в проводнике и из контекстного меню вызвал "Open Git Bash here", и вот я здесь:

В строке приглашения терминала написано:

  • A: Имя пользователя.

  • DESKTOP-70203MC: Имя компьютера.

  • MINGW64: Окружение, в котором работает терминал (среда MinGW64).

  • ~/TestGit: Текущий каталог, где ~ обозначает домашний каталог пользователя, а TestGit — папку в нём.

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

Для начала нужно задать имя пользователя и почту в конфиге git:

git config --global user.name "Имя пользователя"
git config --global user.email "Почта, к которой привязан аккаунт GitHub"

--global служит здесь для задания данных для всех репозиториев на пк, для которых не определен индивидуальный конфиг (без данного флага)

Посмотреть, что все сохранилось, можно с помощью тех же команд, только без явных параметров:

git config --global user.name
git config --global user.email

На данный момент папка, в которой мы находимся, является просто папкой. Сделаем её репозиторием с помощью команды git init

Отлично, git репозиторий создан!

Далее нужно создать первую версию репозитория (зафиксировать ее).

Я создам файл Test.txt, и с помощью команды git status посмотрим текущий статус репозитория:

  • Мы находимся в ветке master (о ветках позже)

  • Коммитов еще нет (о коммитах позже)

  • Не отслеживаемые файлы - файлы, изменения в которых не видит git

  • Ничего не добавлено в коммит, но есть не отслеживаемые файлы

Здесь git сам говорит, что нужно сделать: команда git add, но для нее нужен параметр:
Можно начать отслеживать только один файл с помощью git add имя_файла, а можно сразу все с помощью git add .. Точка здесь означает текущую папку. 

После снова посмотрим, что происходит в репозитории:

Появилась новая надпись: Изменения, которые могут быть закоммичены.

Коммит - своего рода снимок текущего состояния репозитория, создаваемый git'ом. Давайте создадим его с помощью команды git commit -m "Initial commit", в которой параметр commit выполняет одноименную операцию, а параметр "Initial commit", передаваемый как именованный параметр с помощью флага -m, - это сообщение коммита, которое будет отражено в истории. Обычно в таком сообщении указывают, что было сделано в коммите или какие изменения произошли, например: "fix gradle configuration" или "add new color scheme".

Теперь снова посмотрим состояние репозитория. Какая команда? Правильно, git status.

Нечего коммитить, а директория, в котором мы работаем, чистая. В git это значит, что в ней нет изменений.

Теперь я допишу что-нибудь в созданный ранее файл и снова посмотрю состояние репозитория:

Здесь мы видим, что файл Test.txt изменен.

Git снова подсказывает:
- git add для обновления того, что будет закоммичено.
- git restore для отмены изменений в рабочей директории.

Процесс добавления файла в индекс (то, что будет закоммичено) я уже рассмотрел выше, а выполнив вторую команду, мы получим то же состояние репозитория, что и было после создания коммита на прошлом шаге.

Я заранее создал репозиторий на GitHub, подробно здесь, три скрина достаточно ярко описывают весь процесс. На этом моменте можно уже отправлять изменения в удаленный репозиторий, но для начала нужно настроить соединение локального компьютера с аккаунтом GitHub. Я буду делать это с помощью ssh, т.к. это более гибкий и безопасный инструмент по сравнению с HTTPS-соединением, и сейчас проведем эту настройку.

SSH

SSH-соединение работает с помощью двух ключей: публичного и приватного. Приватный будет храниться на ПК, а публичный добавим на GitHub.

Создается пара ключей с помощью утилиты ssh-keygen командой ssh-keygen -t ed25519 -C "почта", дальше можно переопределить директорию для сохранения ключей и названия файлов, но я буду показывать для дефолтных настроек, для этого следует просто протыкать enter до конца.

Ключи теперь лежат в папке .ssh в директории пользователя. Нам нужно получить публичный, для этого в windows используется команда type или cat. type путь_к_файлу , или можно просто пойти в эту папку в проводнике, открыть через удобный редактор и скопировать всё содержимое. Как добавить публичный ключ на GitHub описано здесь.

Теперь для ssh нужно настроить конфиг. В папке .ssh я создал файл config без расширения и добавил в него следующее содержимое:

Host github.com
    HostName github.com
    User 666av6@gmail.com
    IdentityFile C:/Users/A/.ssh/id_ed25519
  • Host я называю именем ключа, поскольку оно может быть любым, но каждая платформа по дефолту в ssh ссылках делает его идентичным HostName (Здесь я оставляю это имя дефолтным, т.к. GitHub дает ссылки именно для такого имени ключа, а для другого придется менять ссылку самостоятельно)

  • HostName - имя хоста

  • User - здесь указывается почта, для которой был сгенерирован ключ

  • IdentityFile - это файл с путем к приватному ключу для идентификации

Теперь скопируем с GitHub ссылку на репозиторий, выбрав SSH:

Добавим удаленный репозиторий в локальный с помощью команды git remote add origin ссылка. Проверить, что все добавилось, можно с git remote -v 

origin - дефолтное название удаленного репозитория. Может быть любым, потому что у локального репозитория может быть много удаленных.

Теперь отправим локальный репозиторий на удаленный с помощью команды git push, но git не даст нам этого сделать, поскольку у ветки нет информации об отслеживании удаленной ветки, и git подскажет, как сделать эту ветку отслеживаемой. Также нам предложена команда для задания отслеживания каждой ветки по дефолту, но я не использую данную опцию, поскольку не всегда всё, что я делаю локально, нужно отправлять на удаленный репозиторий: иногда нужна ветка, чтобы потестить что-то и удалить её после.

После ввода команды git предложит использовать текущий ssh для не известного ранее хоста. Git создаст файл known_hosts в папке .ssh после ввода yes, чтобы добавить этот хост в список подлинных, а после отправит все изменения в удаленный репозиторий.

Теперь все, что мы сделали ранее, увидим на GitHub:

Когда ключ потеряет свой смысл, его можно просто удалить из GitHub, в то время, как с HTTPS-соединением придется либо менять пароль от аккаунта, либо вручную удалять credentials с устройства.

Настройка SSH-соединения происходит один раз, поэтому можно выдохнуть)

Ветки (опционально, но рекомендовано)

В Git ветки - это указатели на коммиты, позволяющие работать над разными версиями кода независимо друг от друга. Основная ветка обычно называется master (или main в новых проектах).

В консоли git текущая ветка показывается в конце первой строчки.

В локальном репозитории ветка создается с помощью команды git branch имя_ветки, а перейти на нее можно с помощью команды git checkout имя_ветки (также эти два действия можно сделать с помощью git checkout -b имя_ветки, но это уже из углубленного).

Посмотреть список доступных локально веток - git branch, в котором рядом с текущей веткой стоит символ звездочки, а список веток в удаленном репозитории - git branch -r.

Поработав с этой веткой и отправив в удаленный репозиторий, переключение на главную ветку производится также с помощью git checkout имя_ветки.

Здесь git говорит, что эта ветка синхронизирована с удаленной - это часть вывода команды git status.

Удаление локальной ветки производится с помощью команды git branch -d имя_ветки.

Здесь git не дает удалить ветку, поскольку она не была отправлена в удаленный репозиторий, и данные могут быть потеряны, поэтому нужно либо отправить её, либо воспользоваться командой git branch -D имя_ветки - force-delete. После отправки ветки в удаленный репозиторий ее можно будет удалить с помощью -d. Вторая подсказка позволяет не показывать больше данное сообщение, но это выходит за рамки статьи.

Заключение

В статье были рассмотрены начальные аспекты работы с git

  • Начальные команды Git: Были описаны ключевые команды для управления репозиториями, включая создание, редактирование и управление ветками.

  • Настройка SSH для Git: Дано пошаговое руководство по настройке подключения по SSH для безопасной и удобной работы с удаленными репозиториями.

Надеюсь, что эта статья действительно станет началом большого пути для тех, кто начинает осваивать Git и мир управления версиями!

No errors, no warnings, gentlemen and ladies!