Что такое GitHub и почему я публикую на нём свои проекты?
Наверное все уже знают, что я публикую свои проекты в первую очередь на GitHub, а до всяких CurseForge и Modrinth у меня руки не доходят)
Но в чём его фишка, как им пользоваться и удобно ли это? - Однозначно да, как разработчик я уже не могу представить свою жизнь без GitHub или других VCS. (Системы контроля версий)
GitHub это платформа с сотнями тысяч различных репозиториев на любые темы. Разработчики там могут публиковать свой код, организовывать работу команд, использовать CI/CD инструменты, публиковать релизы и многое другое. Сегодня я расскажу базовые вещи о том, как с ним работать.
Для того, чтобы начать работать с GitHub достаточно создать аккаунт и установить консольную утилиту Git. Разница между Git и GitHub лишь в том, что первый может хранить всю историю вашего проекта, а второй это веб-сервис, на котором можно публиковать эти самые проекты, а так этих сервисов десятки, есть тот же GitLab или Codeberg. Но лично я предпочитаю для работы не сам Git, а GitHub Desktop за его интуитивно понятный интерфейс.
Первым делом стоит создать свой репозиторий, это, грубо говоря, умная папка, которая будет содержать все изменения вашего проекта, которые вы зафиксируете.
Здесь можно указать название и описание репозитория. Путь к нему на вашем диске, а также .gitignore и лицензию.
Грубо говоря, Git Ignore - это одноимённый файл `.gitignore`, который отвечает за то, какие файлы не будут фиксироваться при изменении. Например, файлы с паролями, всякие индивидуальные настройки и файлы сборки, кэш и тому подобное.
Лицензия - это обычное лицензионное соглашение, которое предлагается пользователям в цифровой форме. Чаще всего она нужна, чтобы защитить ваш код от недобросовестного использования и определяет то, как другие могут им пользоваться. (например, копирование, модификация кода, использование)
Сам факт использования кода на условиях лицензии считается принятием ее условий. Это форма договора присоединения. Сама по себе она не обязательна, но может защитить Вашу работу в некоторых случаях.
После чего у вас будет доступен основной интерфейс приложения:
Тут есть несколько важных разделов:
1 Раздел: Это Ваш текущий репозиторий, там же можно и выбрать другие, если у вас их несколько. У меня их там штук 70...
2 Раздел: Это текущая ветка репозитория. По умолчанию она называется `main`. Они нужны, чтобы вы могли разделять работу над несколькими вещами, не боясь что-то поломать или чтобы в любой момент от неё отказаться без необходимости убирать все изменения в файлах вручную. Также легко разделить работу нескольких людей, предоставив каждому личную ветку. Таким образом при обновлении данных на одной ветке, они не будут затронуты на других. А когда Вы уже будете уверены, что работа завершена, Вы сможете сделать Pull Request в основную ветку (от которой произошла текущая). Обычно это вам предложит сделать сам GitHub.
В этом случае есть один commit поверх основной ветки (ahead) и 5 коммитов которые были пропущены (сделаны на основной ветке, но не на ответвлении)
Но вы всегда можете подтянуть изменения с основной ветки в свою выбрав.
Но что происходит в случае, если Вы с кем-то изменили один и тот же файл в разных ветках, а потом попытались слить изменения в одну ветку? Обычно, если изменения независимые друг от друга (на разных строчках), то ничего страшного, иначе же вам будет предложено самому определить, что делать в этом случае: Взять изменения из основной ветки, из дочерней или самому определить что оставить, а что убрать.
3 Раздел: Это связь с удалённым репозиторием, нажав на эту кнопку, вы можете или отправить свои изменения в удалённый репозиторий (GitHub), или подгрузить их оттуда себе локально на компьютер.
4 Раздел: Это изменённые файлы и история. При каждом изменении они фиксируются в этом списке. Здесь есть все файлы кроме тех, что прописаны в .gitignore. Кроме того, здесь Вы можете выбрать вкладку со всей историей изменений проекта и посмотреть каждый файл
5 Раздел: Это уже само меню коммита. Коммит это грубо говоря все зафиксированные изменения в определённый момент, которые вы хотите отправить в удалённый репозиторий на нужную ветку. Для этого выберите нужные файлы из списка и напишите название коммита (обычно это краткое описание изменений), а также можно написать более подробное описание, но это уже не обязательно. Кстати говоря, слева внизу описания есть кнопка "Generate commit message with Copilot", очень удобная штука, как по мне, оно само создаёт описание всех изменений при помощи ИИ :)
После чего нажмите на саму кнопку коммита, чтобы зафиксировать изменения. После фиксации их не будет в самом репозитории. Потому что вы их только зафиксировали, а не отправили. Для отправки воспользуйтесь кнопкой из 3 раздела.
6 Раздел это предпросмотр всех изменений в файле, то что выделено зелёным - это добавленные строки, а то что выделено красным - удалённые строки.
Примерно так это всё и работает, если обобщать, то получается следующее:
Репозиторий: Хранилище всех файлов проекта, а также всей его истории изменений.
Ветка: Отдельное ответвление от основной части проекта.
Коммит: Фиксация определённых изменений в проекте.
Надеюсь вышло не слишком сложно и запутано...
По крайней мере вы сейчас прочитали всё то, что мы проходили на протяжении полугода в универе, причём совершенно бесплатно и добровольно)))
Ну и напоследок несколько фич, которые я использую при разработке своих проектов:
1) CI/CD инструменты, а именно GitHub Workflow: Это небольшие скрипты, которые сами запускаются при отправке новых коммитов. В данном случае я их использую чтобы GitHub сам скомпилировал мод, выложил его в релизы и отправил об этом уведомление в Discord, согласитесь, гораздо удобнее, чем после каждого изменения делать это всё самому) + В будущем я сделаю ещё и автоматическую публикацию на CurseForge/Modrinth, когда мод будет более стабилен.
2) GitHub Поиск. Как бы странно это не звучало, но почти всем моим знаниям я обязан ему. Когда я не знаю как использовать ту или иную библиотеку, как реализовать ту или иную фишку, я просто брал и вводил ключевые слова вроде "minecraft gltf lwjgl", а также язык "language:Kotlin" и он найдёт все файлы во всех существующих репозиториях с этими ключевыми словами. С таким даже ChatGPT не нужен))
3) Ну и безусловно куда же без форков и Pull Request'ов, очень часто бывает, что какой-нибудь крутой мод, библиотека и т.п. или заброшены, или не обновляются. В этом случае довольно часто появляются люди, готовые продолжить дело автора. Они создают Форк, или же ответвление от основного репозитория и вносят в него свои изменения. Которые они уже могут предложить автору оригинального репозитория через Pull Request или оставить только у себя.
4) История коммитов: Довольно часто я обращаюсь к старому коду, который писал аж несколько лет назад, но потом по какой-то причине отказался от него. Довольно удобно, когда забыл, как использовать ту или иную библиотеку просто посмотреть свой же код, который использовал ранее.
Короче говоря, правду говорят, что GitHub своего рода современная Александрийская Библиотека)
Короче говоря, правду говорят, что GitHub своего рода современная Александрийская Библиотека)