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

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

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

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

Пролог

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

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

92456320c9d4bb9f8e9fe2fb66dcd870.png

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

3a091daa60cff2f0420f24140d05e542.png

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

Настройка

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

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

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

cd1c0fe927583ce9d9dd59e6e9f04b46.png

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

  • 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

3105f101cd0bc71b1c55b4f2978ffa99.png

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

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

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

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

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

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

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

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

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

67610875ec81ecaa2b362e8a3e0e0813.png

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

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

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

72fa1c0277c02c087bd97558345cdb34.png

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

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

fcadce54e6418848263a001b23586e92.png

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

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

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

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

SSH

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

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

9649baf5ae1ac60e95c55b75624cb41c.png

Ключи теперь лежат в папке .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:

c3a8570ef98b5272104864151676e529.png

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

4b0c94bd0b4821c43877e734e20f9436.png

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

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

9e5d423e93c733461eafef13a04c8368.png

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

705ffb845be5330c56807d555f5bdf85.png

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

7efa8c3f59ead4076802e8957a5a7cc4.png

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

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

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

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

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

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

585b2e954f166ac2a6aad9ea79bb58cf.png

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

e2db2f14e7e8ff23d9a93953f4e6ba98.png

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

b595f523f623b6507531b0b80614fea4.png

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

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

8e3e9d8869e8a617fe05b8887180358a.png

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

Заключение

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

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

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

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

No errors, no warnings, gentlemen and ladies!

© Habrahabr.ru