Если вы читаете это, то можем вас поздравить, вы сделали первый шаг к освоению систем контроля версий! Вы уже сталкивались с ними на одной из лабораторных прошлого семестра, но настало время познакомиться с этой темой поближе. Все домашние работы в этом семестре вы будете сдавать, делая коммиты и отправляя их в удалённый репозиторий.
Вы можете обращаться к этому гайду, когда забыли синтаксис чего-либо, либо же хотите вспомнить, как создавать репозиторий.
Tip
Вы можете посмотреть содержание данной статьи, кликнув на иконку
в правом верхнем углу этой статьи.
Уточнение: Git != Github. Простыми словами, Git - это сама программа, которая осуществляет контроль версий, а Github - это ресурс, где можно удалённо хранить созданные гитом репозитории. Если вы ещё не заегистрированы на этом ресурсе, сделайте это, перейдя на главную страницу. Процесс регистрации не должен вызвать затруднений. Главное правило: используйте почту, к которой у вас есть доступ.
С недавнего времени в целях безопасности GitHub разрешает вносить изменения в удалённые репозитории через командную строку только с использованием Personal access token. Поэтому, прежде чем начать работу, нам нужно его получить.
- Авторизуйтесь в GitHub. Вы попадёте на главную страницу. Щёлкните по своей аватарке в правом верхнем углу и в выпадающем меню выберите пункт Settings.
-
Прокрутите открывшееся окно настроек в самый низ до пункта меню Developer settings.
-
В настройках разработчика выберите пункт меню Personal access tokens -> Tokens (classic). В этом разделе выберите пункт Generate new token (classic).
-
В открывшемся меню необходимо дать токену пояснение, для чего он создаётся (например, mmcs-hw). В разделе Select scopes нужно отметить только одну галочку - repo. Также можно изменить срок действия токена в разделе Expiration на No expiration, если вы не хотите создавать новый токен каждый месяц (бессрочные токены не рекомендуются к использованию самим Github, но это всё-таки удобнее, чем постоянное их обновление).
-
После того, как вы проверили все настройки, нажмите на кнопку Generate Token. На странице будет показан сгенерированный токен. Его нужно скопировать и сохранить там где его легко найдёте вы, и не сможет найти никто другой.
Warning
Как только вы закроете эту страницу, посмотреть токен уже будет нельзя, и придётся генерировать новый. Позже мы рассмотрим, как сохранить его в Git на вашем компьютере, не потеряйте его до тех пор!
Теперь, когда у вас есть токен, вы сможете авторизоваться во время работы с репозиторием. Когда возникает эта необходимость, мы рассмотрим ниже.
Important
Этот раздел не актуален для большинства домашних, т.к. в домашних используется Github Classroom. Но он может быть полезен для создания личных репозиториев, или для случаев, когда в задании явно указано, что необходимо создать репозиторий с нуля.
Создание удалённого репозитория это достаточно простая процедура. Для начала авторизуйтесь на GitHub, после чего нажмите на + в правом верхнем углу, и выберите там New repository.
В открывшемся окне вам необходимо ввести название вашего репозитория (называйте свои репозитории ёмко и кратко!). По желанию можете добавить описание. Тип репозитория выбирайте в зависимости от требований задания или своих целей. Public репозитории может просматривать, скачивать и т.д. любой человек, а Private, в свою очередь, только тот, кого вы добавите в коллабораторов. Вы можете создать readme файл, в котором можно описать важную информацию о данном репозитории (но будьте осторожны, в этом случае репозиторий будет не пустой при создании!). .gitignore генерировать не надо, мы будем использзовать свой. Не забудьте нажать на кнопку Create repository.
Удалённый репозиторий создан! Теперь, чтобы начать его использовать, нужно связать его с локальным.
Перейдите на сайт Git и скачайте подходящий вам установщик. Большинство параметров можно оставить дефолтными, за исключением следующих: Во-первых, измените Vim на любой другой текстовый редактор, если не любите страдать.
Во-вторых, измените стандартные названия начальных веток на main (Github ушёл от названия начальной ветки master в сторону названия main).
Остальные параметры можно оставить без изменения. Чтобы проверить, что вс действительно установлено, откройте консоль и введите git --version. Если вывелась версия гит, всё в порядке.
Теперь необходимо первично настроить гит, чтобы идентифицировать себя. Эти действия нужно проделывать каждый раз перед началом работы с git, если вы работаете не со своего личного компьютера (например, из компьютерного класса). На своём личном компьютере это необходимо сделать только один раз, при установке. Для начала установите свои имя и фамилию, чтобы можно было понять, кто автор коммитов. Обязательно возьмите имя и фамилию в кавычки, иначе сохранится только часть до пробела.
git config --global user.name "Имя Фамилия"
Теперь надо установить свою электронную почту. Почта должна быть той же, что вы использовали при регистрации в Github.
git config --global user.email your_email@example.com
И последняя команда, которую надо выполнить, это активации функции сохранения вашего токена Github с помощью Git Credential. Это необходимо, чтобы не вводить токен каждый раз, когда вы хотите что-то запушить или запуллить. После её активации при первом пуше/пулле ваш токен будет сохранён и будет использоваться во всех дальнейших операциях.
git config --global credential.helper store
Готово! Git установлен, настроен и готов к работе.
Всю работу с вашими проектами вы будете проводить локально. В любом случае вашим первым шагом будет создание локального репозитория. Откройте папку с вашим решением в проводнике (либо папку, где будет находиться ваш будущий репозиторий). Создайте файл .gitignore из тегов как показано на изображении ниже и положите в эту папку.
Этот файл определяет, какие файлы не должны попасть в индекс, и, соответственно, в репозиторий. Этими файлами могут быть настройки, файлы, генерируемые при билде и прочее, что совершенно бессмысленно (а иногда и вредно!) оставлять в удалённом репозитории. У вас на компьютере при этом эти файлы никуда не денутся, а просто будут игнорироваться. Откройте консоль в текущей папке (через контекстное меню, либо введя cmd в строке, где указан путь к папке). Теперь инициализируйте репозиторий:
git init
На всякий случай вручную указываем имя основной ветки main для дальнейшей корректной работы с Github:
git branch -M main
Соединим наш локальный репозиторий с удалённым на Github. Сначала нам нужно скопировать ссылку на репозиторий. В случае с пустым репозиторием она находится на самом видном месте, а если в репозиторий уже что-то есть (сгенерированное автоматически самим Github), её можно найти в меню Code.
Теперь локальному репозиторию необходимо сообщить адрес удалённого:
git remote add origin <скопированная ссылка>
На случай, если в удалённом репозитории уже есть что-либо, получим все коммиты оттуда (если репозиторий пустой, можно пропустить этот шаг):
git pull origin main
Теперь нам нужно отправить наши локальные изменения на Github. Чтобы проверить состояния репозитория, выполните команду:
git status
В ответ вы получите информацию о состоянии репозитория. В частности, гит указывает, на какой вы сейчас ветке (должна быть main), а также состояние всех ваших файлов. Как вы заметили, ваш .gitignore файл подсвечен красным и помещён в категорию Untracked (не в индексе). Это означает, что гит не отслеживает изменения этого файла. Надо это исправить! Для этого введите команду, добавляющую все доступные файлы в индекс:
git add .
После этого вы можете ещё раз запросить статус репозитория и обнаружить, что состояние файлов поменялось (и он стал отмечен зелёным). Теперь нам надо зафиксировать изменения в нашем локальном репозитории (точнее, добавить в историю изменений проекта наши файлы). Для этого нужно выполнить команду:
git commit -m "Initial commit"
В параметре -m мы передаём сообщение для коммита, которое будет отображено в дереве изменений. Обычно в этих сообщениях кратко передают суть изменений, внесённых до этого коммита. Итак, мы зафиксировали изменения, но теперь нужно сообщить удалённому репозиторию о том, что у нас есть локальный репозиторий и были сделаны какие-то коммиты. Для этого нужно запушить изменения. Выполните команду и введите ваш логин и Personal Access Token, если Git вас попросит:
git push -u origin main
Теперь можете проверить ваш удалённый репозиторий. Ваши файлы должны там появиться, ровно как и сообщение коммита. Можно приступать к работе!
Если в репозитории уже есть какието файлы (например, заготовки, или же файлы, сгенерированные Github), то вместо создания локального репозитория с нуля и ручного пулла изменений намного лучше склонировать репозиторий. Название этого действия полностью отражает то, для чего его делают: оно копирует все коммиты и файлы из удалённого реозитория, а также автоматически создаёт локальный. Звучит удобно, не так ли?
Чтобы склонировать репозиторий, вам нужно знать ссылку на него. В случае с github это может быть как прямая ссылка на реозиторий из строки браузера, так и ссылка .git, которую можно найти на главной странице репозитория:
Теперь, чтобы клонировать свой удалённый репозиторий, создайте папку, в которой будет располагаться ваш проект, перейдите в неё в консоли и выполните команду:
git clone <ваша ссылка>
И... Всё! В появивишейся папке вы найдёте все файлы (и коммиты!) из удалённого репозитория, и вы можете продолжать работать с этим репозиторием как обычно. Не забудьте добавить файл .gitignore, чтобы в репозиторий не попало ничего лишнего!
Note
По умолчанию в текущей директории создастся папка с именем вашего удалённого репозитория, но вы можете поменять путь, указав его после ссылки в двойных кавычках
В общем и целом всю работу с Git на простейшем уровне можно описать в одной диаграмме:
Именно так будет выглядеть ваша работа в первых домашних заданиях. В течение семестра мы изучим ещё больше функций этой VCS.
Механизм ветвления позволяет одновременно работать над разными фичами, не путая изменения в коде по ходу разработки. Это полезно, когда вы хотите сделать какуюто задачу параллельно с кем-то другим, работающим над проектом, либо же боитесь испортить main-ветку в процессе работы над проектом.
Для создания новой ветки из вашей основной ветки main вам в первую очередь предстоит закоммититить (и запушить) все текущие изменения в ней. После чего выполните команду (где new-branch - это название новой ветки):
git checkout -b new-branch
И после этого вы окажетесь на новой ветке. Вы можете вносить любые изменения, коммитить и пушить их, и ваша ветка main при этом не изменится, изменится только ваша текущая ветка.
Note
Команда git status, помимо всего прочего, указывает, в какой ветке вы сейчас работаете
Чтобы пушить изменения в удалённый репозиторий, используйте уже знакомую команду (где your-branch - название вашей ветки):
git push origin your-branch
Для перехода обратно в ветку main вам потребуется закоммитить (и запушить) все текущие изменения, после чего выолнить команду:
git checkout main
Таким же способом можно переключиться на любую ветку, заменив main на её название.
В какойто момент вы доделаете всю необходимую работу в ветке и захотите перенести все изменения в main. Для того чтобы "слить" ветки, вам потребуется команда merge. Например, вы сделали несколько коммитов в ветке cool-feature. Чтобы слить её с main:
- Перейдите в ветку main
git checkout main - Выполните команду:
git merge cool-feature
Обратите внимание, что для успешного слияния веток в них не должно быть конфликтов (конфликты возникают, когда вы, допустим, отвели от main некую ветку, сделали в ней коммиты, а параллельно с этим сделали коммиты в main в тех же файлах). Решение конфликтов будет рассмотрено позже.
Домашние задания будут приниматься в специальном разделе Github для менеджмента образовательных курсов – Github Classroom. Работа с ним совсем немного отличается от обычных репозиториев.
Войдите в свой аккаунт Github. В каждом домашнем задании есть ссылка на Assignment. Когда вы переходите по такой ссылке в первый раз, вам нужно выдать разрешения Github Classroom для своего аккаунта. После чего вы попадёте на страницу выбора идентификатора. Выберите своё имя из списка. Если его там нет, нажмите Skip to the next step и сообщите своему преподавателю.
Когда вы выбрали своё имя, вас перебросит на страницу задания. Это означает, что вы успешно авторизовались и можно приступать к заданию.
Когда вы переходите по ссылке на задание (не важно, после процесса авторизации, или прямиком из мудла), вам будет предложено приступить к заданию. Это действие ни к чему не обязывает, оно просто создаёт для вас репозиторий. Нажмите Accept this assignment.
Вас перебросит на страницу создания репозитория. Подождите несколько секунд и обновите страницу, чтобы увидеть результат.
Caution
Внизу страницы вы можете посмотреть дедлайн для данного задания. После дедлайна вы теряете возможность пушить в репозиторий!
Обновив страницу, вы увидите ссылку на ваш репозиторий, в котором надо будет выполнять задание. Вы всегда можете вернуться на эту страницу из задания в мудле.
В репозитории уже будут находиться служебные папки, ветки и коммиты. Не бойтесь, они не кусаются. Вашему процессу выполнения задания они никак не помешают. Создайте локальный репозиторий и свяжите его с данным удалённым по инструкциям выше. После соединения репозиториев выполните задания, делая коммиты по ходу выполнения, и запушьте изменения на Github до дедлайна.
Обратите внимание на вкладку Pull Requests. Там автоматически создался пулл реквест, внутри которого ваш преподаватель может оставлять комментарии к вашему коду. Уведомления о новых комментариях будут приходить на вашу почту.
Caution
Не сливайте и не закрывайте этот пулл реквест!









