# Вступ до GitHub Цей урок охоплює основи GitHub — платформи для хостингу та управління змінами у вашому коді. ![Intro to GitHub](../../../../translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.uk.png) > Скетчноут від [Tomomi Imura](https://twitter.com/girlie_mac) ## Передлекційна вікторина [Передлекційна вікторина](https://ff-quizzes.netlify.app) ## Вступ У цьому уроці ми розглянемо: - як відстежувати роботу, яку ви виконуєте на своєму комп'ютері - як працювати над проєктами разом з іншими - як робити внески у програмне забезпечення з відкритим кодом ### Попередні вимоги Перед початком перевірте, чи встановлений у вас Git. У терміналі введіть: `git --version` Якщо Git не встановлений, [завантажте Git](https://git-scm.com/downloads). Потім налаштуйте свій локальний профіль Git у терміналі: * `git config --global user.name "your-name"` * `git config --global user.email "your-email"` Щоб перевірити, чи вже налаштований Git, введіть: `git config --list` Вам також знадобиться обліковий запис GitHub, редактор коду (наприклад, Visual Studio Code) і доступ до терміналу (або командного рядка). Перейдіть на [github.com](https://github.com/) і створіть обліковий запис, якщо у вас його ще немає, або увійдіть і заповніть свій профіль. ✅ GitHub — це не єдиний репозиторій коду у світі; є й інші, але GitHub є найвідомішим. ### Підготовка Вам знадобиться папка з проєктом коду на вашому локальному комп'ютері (ноутбуці або ПК) і публічний репозиторій на GitHub, який слугуватиме прикладом того, як робити внески в проєкти інших. --- ## Управління кодом Припустимо, у вас є локальна папка з якимось проєктом коду, і ви хочете почати відстежувати свій прогрес за допомогою git — системи контролю версій. Деякі люди порівнюють використання git із написанням любовного листа до свого майбутнього "я". Читаючи свої повідомлення про коміти через дні, тижні чи місяці, ви зможете згадати, чому прийняли те чи інше рішення, або "відкотити" зміни — за умови, що ви пишете хороші повідомлення про коміти. ### Завдання: Створіть репозиторій і зафіксуйте код > Перегляньте відео > > [![Відео про основи Git і GitHub](https://img.youtube.com/vi/9R31OUPpxU4/0.jpg)](https://www.youtube.com/watch?v=9R31OUPpxU4) 1. **Створіть репозиторій на GitHub**. На GitHub.com, у вкладці репозиторіїв або у верхньому правому куті навігаційної панелі, знайдіть кнопку **new repo**. 1. Дайте вашому репозиторію (папці) назву. 1. Натисніть **create repository**. 1. **Перейдіть до вашої робочої папки**. У терміналі перейдіть до папки (також відомої як директорія), яку ви хочете почати відстежувати. Введіть: ```bash cd [name of your folder] ``` 1. **Ініціалізуйте git-репозиторій**. У вашому проєкті введіть: ```bash git init ``` 1. **Перевірте статус**. Щоб перевірити статус вашого репозиторію, введіть: ```bash git status ``` Вивід може виглядати приблизно так: ```output Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: file.txt modified: file2.txt ``` Зазвичай команда `git status` повідомляє вам, які файли готові до _збереження_ у репозиторії або мають зміни, які ви, можливо, хочете зафіксувати. 1. **Додайте всі файли для відстеження** Це також називається підготовкою файлів/додаванням файлів до області підготовки. ```bash git add . ``` Аргумент `git add` плюс `.` вказує, що всі ваші файли та зміни будуть відстежуватися. 1. **Додайте вибрані файли для відстеження** ```bash git add [file or folder name] ``` Це дозволяє додати лише вибрані файли до області підготовки, якщо ви не хочете комітити всі файли одразу. 1. **Зніміть підготовку з усіх файлів** ```bash git reset ``` Ця команда дозволяє зняти підготовку з усіх файлів одразу. 1. **Зніміть підготовку з конкретного файлу** ```bash git reset [file or folder name] ``` Ця команда дозволяє зняти підготовку лише з конкретного файлу, який ви не хочете включати до наступного коміту. 1. **Збережіть свою роботу**. На цьому етапі ви додали файли до так званої _області підготовки_. Це місце, де Git відстежує ваші файли. Щоб зробити зміни постійними, вам потрібно _зафіксувати_ файли. Для цього створіть _коміт_ за допомогою команди `git commit`. Коміт представляє точку збереження в історії вашого репозиторію. Введіть наступне, щоб створити коміт: ```bash git commit -m "first commit" ``` Ця команда фіксує всі ваші файли, додаючи повідомлення "first commit". Для майбутніх повідомлень про коміти варто бути більш описовими, щоб передати, які саме зміни ви зробили. 1. **Підключіть ваш локальний репозиторій Git до GitHub**. Репозиторій Git корисний на вашому комп'ютері, але в якийсь момент ви захочете створити резервну копію своїх файлів десь і запросити інших людей працювати з вами над вашим репозиторієм. Одне з чудових місць для цього — GitHub. Пам'ятайте, що ми вже створили репозиторій на GitHub, тому єдине, що потрібно зробити, це підключити ваш локальний репозиторій Git до GitHub. Команда `git remote add` зробить це. Введіть наступну команду: > Зверніть увагу, перед тим як вводити команду, перейдіть на сторінку вашого репозиторію на GitHub, щоб знайти URL репозиторію. Ви використаєте його в команді нижче. Замініть ```https://github.com/username/repository_name.git``` на ваш URL GitHub. ```bash git remote add origin https://github.com/username/repository_name.git ``` Це створює _віддалене підключення_ (remote), назване "origin", яке вказує на репозиторій GitHub, створений раніше. 1. **Відправте локальні файли на GitHub**. До цього моменту ви створили _підключення_ між локальним репозиторієм і репозиторієм GitHub. Відправимо ці файли на GitHub за допомогою команди `git push`, ось так: > Зверніть увагу, ваша назва гілки за замовчуванням може відрізнятися від ```main```. ```bash git push -u origin main ``` Це відправляє ваші коміти у гілку "main" на GitHub. 2. **Щоб додати більше змін**. Якщо ви хочете продовжити вносити зміни та відправляти їх на GitHub, вам потрібно буде використовувати наступні три команди: ```bash git add . git commit -m "type your commit message here" git push ``` > Порада: Можливо, ви також захочете додати файл `.gitignore`, щоб запобігти відстеженню файлів, які ви не хочете бачити на GitHub — наприклад, файлу з нотатками, який ви зберігаєте в тій самій папці, але який не має бути у публічному репозиторії. Ви можете знайти шаблони для файлів `.gitignore` на сторінці [.gitignore templates](https://github.com/github/gitignore). #### Повідомлення про коміти Чудовий заголовок повідомлення про коміт завершує наступне речення: Якщо застосувати, цей коміт <ваш заголовок тут>. Для заголовка використовуйте наказовий теперішній час: "змінити", а не "змінив" чи "зміни". Як і в заголовку, у тілі (необов'язково) також використовуйте наказовий теперішній час. Тіло має включати мотивацію для зміни та порівняння з попередньою поведінкою. Ви пояснюєте `чому`, а не `як`. ✅ Приділіть кілька хвилин, щоб переглянути GitHub. Чи можете ви знайти справді чудове повідомлення про коміт? А мінімальне? Яка інформація, на вашу думку, є найважливішою та найкориснішою для передачі у повідомленні про коміт? ### Завдання: Співпраця Основна причина розміщення проєктів на GitHub — це можливість співпрацювати з іншими розробниками. ## Робота над проєктами з іншими > Перегляньте відео > > [![Відео про основи Git і GitHub](https://img.youtube.com/vi/bFCM-PC3cu8/0.jpg)](https://www.youtube.com/watch?v=bFCM-PC3cu8) У вашому репозиторії перейдіть до `Insights > Community`, щоб побачити, як ваш проєкт відповідає рекомендованим стандартам спільноти. Ось кілька речей, які можуть покращити ваш репозиторій на GitHub: - **Опис**. Чи додали ви опис вашого проєкту? - **README**. Чи додали ви README? GitHub надає рекомендації щодо написання [README](https://docs.github.com/articles/about-readmes/?WT.mc_id=academic-77807-sagibbon). - **Керівництво для внесків**. Чи має ваш проєкт [керівництво для внесків](https://docs.github.com/articles/setting-guidelines-for-repository-contributors/?WT.mc_id=academic-77807-sagibbon)? - **Кодекс поведінки**. Чи додали ви [Кодекс поведінки](https://docs.github.com/articles/adding-a-code-of-conduct-to-your-project/)? - **Ліцензія**. Можливо, найважливіше — [ліцензія](https://docs.github.com/articles/adding-a-license-to-a-repository/)? Усі ці ресурси допоможуть новим членам команди швидше адаптуватися. Це зазвичай ті речі, які нові учасники переглядають перед тим, як ознайомитися з вашим кодом, щоб зрозуміти, чи варто їм витрачати час на ваш проєкт. ✅ Файли README, хоча їх підготовка займає час, часто ігноруються зайнятими підтримувачами. Чи можете ви знайти приклад особливо описового README? Примітка: існують [інструменти для створення хороших README](https://www.makeareadme.com/), які вам можуть сподобатися. ### Завдання: Об'єднайте код Документація для внесків допомагає людям робити внески у проєкт. Вона пояснює, які типи внесків ви шукаєте і як працює процес. Учасники повинні пройти серію кроків, щоб мати змогу зробити внесок у ваш репозиторій на GitHub: 1. **Форк вашого репозиторію**. Ви, ймовірно, захочете, щоб люди _форкали_ ваш проєкт. Форк означає створення копії вашого репозиторію у їхньому профілі GitHub. 1. **Клонування**. Після цього вони клонують проєкт на свій локальний комп'ютер. 1. **Створення гілки**. Ви захочете попросити їх створити _гілку_ для своєї роботи. 1. **Фокусування змін на одній області**. Попросіть учасників зосередити свої внески на чомусь одному за раз — таким чином шанси, що ви зможете _об'єднати_ їхню роботу, будуть вищими. Уявіть, що вони виправляють помилку, додають нову функцію та оновлюють кілька тестів — що, якщо ви хочете або можете реалізувати лише 2 із 3, або 1 із 3 змін? ✅ Уявіть ситуацію, коли гілки є особливо важливими для написання та випуску хорошого коду. Які випадки використання ви можете придумати? > Примітка: будьте зміною, яку хочете бачити у світі, і створюйте гілки для своєї роботи також. Усі коміти, які ви робите, будуть зроблені у гілці, до якої ви зараз "перемкнуті". Використовуйте `git status`, щоб побачити, у якій гілці ви перебуваєте. Давайте розглянемо робочий процес учасника. Припустимо, учасник вже _форкнув_ і _клонував_ репозиторій, тому у нього є готовий Git-репозиторій на локальному комп'ютері: 1. **Створіть гілку**. Використовуйте команду `git branch`, щоб створити гілку, яка міститиме зміни, які вони планують внести: ```bash git branch [branch-name] ``` 1. **Перемкніться на робочу гілку**. Перемкніться на вказану гілку та оновіть робочу директорію за допомогою `git switch`: ```bash git switch [branch-name] ``` 1. **Виконайте роботу**. На цьому етапі ви хочете додати свої зміни. Не забудьте повідомити про це Git за допомогою наступних команд: ```bash git add . git commit -m "my changes" ``` Переконайтеся, що ви дали своєму коміту гарну назву — для себе, а також для підтримувача репозиторію, якому ви допомагаєте. 1. **Об'єднайте свою роботу з гілкою `main`**. У якийсь момент ви закінчите роботу і захочете об'єднати її з гілкою `main`. Гілка `main` могла змінитися за цей час, тому переконайтеся, що ви спочатку оновили її до останньої версії за допомогою наступних команд: ```bash git switch main git pull ``` На цьому етапі ви хочете переконатися, що будь-які _конфлікти_, ситуації, коли Git не може легко _об'єднати_ зміни, виникають у вашій робочій гілці. Тому виконайте наступні команди: ```bash git switch [branch_name] git merge main ``` Це принесе всі зміни з `main` у вашу гілку, і, сподіваємося, ви зможете просто продовжити. Якщо ні, VS Code покаже вам, де Git _заплутався_, і ви просто зміните відповідні файли, щоб вказати, який вміст є найбільш точним. 1. **Відправте свою роботу на GitHub**. Відправка вашої роботи на GitHub означає дві речі: відправку вашої гілки у ваш репозиторій і відкриття PR (Pull Request). ```bash git push --set-upstream origin [branch-name] ``` Наведена вище команда створює гілку у вашому форкнутому репозиторії. 1. **Відкрийте PR**. Далі ви хочете відкрити PR. Ви робите це, перейшовши до форкнутого репозиторію на GitHub. Ви побачите індикацію на GitHub, де вас запитають, чи хочете ви створити новий PR. Натисніть це, і ви потрапите в інтерфейс, де зможете змінити заголовок повідомлення коміту, дати йому більш відповідний опис. Тепер підтримувач репозиторію, який ви форкнули, побачить цей PR і, _сподіваємося_, оцінить і _об'єднає_ ваш PR. Ви тепер учасник, ура :) 1. **Очистіть**. Вважається гарною практикою _очистити_ після успішного об'єднання PR. Ви хочете очистити як локальну гілку, так і гілку, яку ви відправили на GitHub. Спочатку видаліть її локально за допомогою наступної команди: ```bash git branch -d [branch-name] ``` Переконайтеся, що ви перейшли на сторінку GitHub для форкнут `Pull request` здається трохи дивним терміном, адже насправді ви хочете "запушити" свої зміни до проєкту. Але власник проєкту або основна команда повинні розглянути ваші зміни перед тим, як об'єднати їх із "головною" гілкою проєкту, тому ви фактично запитуєте рішення про внесення змін у власника. Pull request — це місце для порівняння та обговорення відмінностей, внесених у гілку, з рецензіями, коментарями, інтегрованими тестами тощо. Хороший pull request дотримується приблизно тих самих правил, що й повідомлення про коміт. Ви можете додати посилання на проблему в трекері проблем, якщо ваша робота, наприклад, виправляє цю проблему. Це робиться за допомогою символу `#`, за яким слідує номер вашої проблеми. Наприклад, `#97`. 🤞Тримаємо кулаки, щоб усі перевірки пройшли успішно, і власник(и) проєкту об'єднали ваші зміни з проєктом🤞 Оновіть вашу поточну локальну робочу гілку всіма новими комітами з відповідної віддаленої гілки на GitHub: `git pull` ## Як зробити внесок у проєкти з відкритим кодом Спочатку знайдіть репозиторій (або **репо**) на GitHub, який вас цікавить і до якого ви хочете внести зміни. Вам потрібно буде скопіювати його вміст на свій комп'ютер. ✅ Хороший спосіб знайти репозиторії для початківців — це [шукати за тегом 'good-first-issue'](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/). ![Скопіюйте репозиторій локально](../../../../translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.uk.png) Є кілька способів скопіювати код. Один із них — "клонувати" вміст репозиторію, використовуючи HTTPS, SSH або GitHub CLI (інтерфейс командного рядка). Відкрийте термінал і клонуйте репозиторій таким чином: `git clone https://github.com/ProjectURL` Щоб працювати над проєктом, перейдіть до потрібної папки: `cd ProjectURL` Ви також можете відкрити весь проєкт за допомогою [Codespaces](https://github.com/features/codespaces), вбудованого редактора коду / хмарного середовища розробки від GitHub, або [GitHub Desktop](https://desktop.github.com/). Нарешті, ви можете завантажити код у вигляді архіву. ### Кілька цікавих фактів про GitHub Ви можете додати зірочку, спостерігати або "форкнути" будь-який публічний репозиторій на GitHub. Ваші зіркові репозиторії можна знайти у випадаючому меню у верхньому правому куті. Це як закладки, але для коду. У проєктах є трекер проблем, зазвичай на GitHub у вкладці "Issues", якщо не вказано інше, де люди обговорюють проблеми, пов'язані з проєктом. А вкладка Pull Requests — це місце, де обговорюють і переглядають зміни, які перебувають у процесі. У проєктах також можуть бути обговорення на форумах, у списках розсилки або в чатах, таких як Slack, Discord чи IRC. ✅ Ознайомтеся з вашим новим репозиторієм на GitHub і спробуйте кілька речей, наприклад, змінити налаштування, додати інформацію до репозиторію або створити проєкт (наприклад, дошку Kanban). Є багато цікавого, що можна зробити! --- ## 🚀 Виклик Попрацюйте в парі з другом над кодом один одного. Створіть спільний проєкт, форкніть код, створіть гілки та об'єднайте зміни. ## Післялекційний тест [Післялекційний тест](https://ff-quizzes.netlify.app/web/en/) ## Огляд і самостійне навчання Дізнайтеся більше про [внесок у програмне забезпечення з відкритим кодом](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution). [Шпаргалка з Git](https://training.github.com/downloads/github-git-cheat-sheet/). Практикуйтеся, практикуйтеся, практикуйтеся. GitHub пропонує чудові навчальні шляхи через [skills.github.com](https://skills.github.com): - [Перший тиждень на GitHub](https://skills.github.com/#first-week-on-github) Там ви також знайдете більш просунуті курси. ## Завдання Пройдіть [курс "Перший тиждень на GitHub"](https://skills.github.com/#first-week-on-github) --- **Відмова від відповідальності**: Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильне тлумачення, що виникають внаслідок використання цього перекладу.