Как скачать репозиторий с github windows

When you create a repository on GitHub.com, it exists as a remote repository. You can clone your repository to create a local copy on your computer and sync between the two locations.

About cloning a repository

You can clone a repository from GitHub.com to your local computer to make it easier to fix merge conflicts, add or remove files, and push larger commits. When you clone a repository, you copy the repository from GitHub.com to your local machine.

Cloning a repository pulls down a full copy of all the repository data that GitHub.com has at that point in time, including all versions of every file and folder for the project. You can push your changes to the remote repository on GitHub.com, or pull other people’s changes from GitHub.com. For more information, see «Using Git».

You can clone your existing repository or clone another person’s existing repository to contribute to a project.

Cloning a repository

  1. On GitHub.com, navigate to the main page of the repository.

  2. Above the list of files, click Code.
    "Code" button

  3. Copy the URL for the repository.

    • To clone the repository using HTTPS, under «HTTPS», click .
    • To clone the repository using an SSH key, including a certificate issued by your organization’s SSH certificate authority, click SSH, then click .
    • To clone a repository using GitHub CLI, click GitHub CLI, then click .
      The clipboard icon for copying the URL to clone a repository with GitHub CLI
  4. Open TerminalTerminalGit Bash.

  5. Change the current working directory to the location where you want the cloned directory.

  6. Type git clone, and then paste the URL you copied earlier.

    $ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
  7. Press Enter to create your local clone.

    $ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
    > Cloning into `Spoon-Knife`...
    > remote: Counting objects: 10, done.
    > remote: Compressing objects: 100% (8/8), done.
    > remove: Total 10 (delta 1), reused 10 (delta 1)
    > Unpacking objects: 100% (10/10), done.

To clone a repository locally, use the repo clone subcommand. Replace the repository parameter with the repository name. For example, octo-org/octo-repo, monalisa/octo-repo, or octo-repo. If the OWNER/ portion of the OWNER/REPO repository argument is omitted, it defaults to the name of the authenticating user.

gh repo clone REPOSITORY

You can also use the GitHub URL to clone a repository.

gh repo clone https://github.com/PATH-TO/REPOSITORY
  1. On GitHub.com, navigate to the main page of the repository.
  2. Above the list of files, click Code.
    "Code" button
  3. Click Open with GitHub Desktop to clone and open the repository with GitHub Desktop.
    "Open with GitHub Desktop" button
  4. Follow the prompts in GitHub Desktop to complete the clone.

For more information, see «Cloning a repository from GitHub to GitHub Desktop.»

Cloning an empty repository

An empty repository contains no files. It’s often made if you don’t initialize the repository with a README when creating it.

  1. On GitHub.com, navigate to the main page of the repository.

  2. To clone your repository using the command line using HTTPS, under «Quick setup», click . To clone the repository using an SSH key, including a certificate issued by your organization’s SSH certificate authority, click SSH, then click .
    Empty repository clone URL button

    Alternatively, to clone your repository in Desktop, click Set up in Desktop and follow the prompts to complete the clone.
    Empty repository clone desktop button

  3. Open TerminalTerminalGit Bash.

  4. Change the current working directory to the location where you want the cloned directory.

  5. Type git clone, and then paste the URL you copied earlier.

    $ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
  6. Press Enter to create your local clone.

    $ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
    > Cloning into `Spoon-Knife`...
    > remote: Counting objects: 10, done.
    > remote: Compressing objects: 100% (8/8), done.
    > remove: Total 10 (delta 1), reused 10 (delta 1)
    > Unpacking objects: 100% (10/10), done.

Troubleshooting cloning errors

When cloning a repository it’s possible that you might encounter some errors.

If you’re unable to clone a repository, check that:

  • You can connect using HTTPS. For more information, see «HTTPS cloning errors.»
  • You have permission to access the repository you want to clone. For more information, see «Error: Repository not found.»
  • The default branch you want to clone still exists. For more information, see «Error: Remote HEAD refers to nonexistent ref, unable to checkout.»

Further reading

  • «Troubleshooting connectivity problems»

#статьи

  • 10 ноя 2022

  • 0

Закройте IDE. Забудьте про пуши. Отрекитесь от коммитов и репозиториев.

Кадр: сериал «Остановись и гори»

Максим Сафронов

Автор, редактор, IT-журналист. Рассказывает о новых технологиях, цифровых профессиях и полезных инструментах для разработчиков. Любит играть на электрогитаре и программировать на Swift.

Если вы откроете файл в веб-версии GitHub, то заметите, что там нет отдельной кнопки «Скачать». Действительно, удобного способа загружать код напрямую с сайта разработчики не завезли, но есть альтернативные способы — в этой статье как раз о них поговорим. Заодно разберёмся, как скачивать файлы с GitHub на смартфон — пока только на Android-устройства, с айфонами всё сложно.


Все проекты на GitHub хранятся в репозиториях. Репозиторий — это место, где лежат файлы, библиотеки и фрагменты кода программы. Хорошая новость: если у вас есть доступ к проекту, его можно утащить себе на компьютер и разобрать на отдельные файлы. Вот как это сделать:

Шаг 1. Выберите проект, который хотите скачать. Ваши репозитории хранятся в разделе Your repositories, а проекты из свободного доступа можно найти с помощью окошка Search or jump to.

Скриншот: Skillbox Media

Шаг 2. Откройте выбранный проект. Мы, например, решили забрать себе классический «виндовый» калькулятор, с недавних пор выложенный в открытый доступ в аккаунте Microsoft.

Скриншот: Skillbox Media

Шаг 3. Нажмите кнопку Code в правом верхнем углу. Выпадет меню, в котором нужно выбрать Download ZIP.

Скриншот: Skillbox Media

Готово! Теперь у нас на компьютере есть собственная версия проекта. Можно запустить его в Visual Studio, а также в другом редакторе кода или IDE и допилить под свои нужды. Например, перекрасить кнопки в фиолетовый цвет — а почему бы и нет? 🙂


Единственный штатный способ скачать отдельный файл в GitHub — это кнопка Raw. Она превращает код файла в обычный текстовый документ без всякой разметки — в таком виде его можно легко загрузить на жёсткий диск. Не слишком удобный, но рабочий способ — давайте его тоже разберём.

Шаг 1. В репозитории проекта откройте файл, который хотите скачать.

Скриншот: Skillbox Media

Шаг 2. Когда файл откроется, нажмите кнопку Raw.

Скриншот: Skillbox Media

Шаг 3. Перед вами — исходный код файла, открытый в браузере. Чтобы его скачать, нажмите правой кнопкой мыши, а потом выберите «Сохранить как…».

Скриншот: Skillbox Media

Шаг 4. В открывшемся окне можно задать файлу имя и формат. Если планируете работать с кодом в текстовом редакторе, можно оставить .txt.


Использовать расширение

В интернет-магазинах браузеров полно расширений, которые облегчают загрузку с GitHub. Например, GitZip for GitHub помогает скачивать не только файлы, но и целые папки. Рассказываем, как им пользоваться:

Шаг 1. Скачайте и установите утилиту в магазине расширений вашего браузера — есть версии для Chrome, Microsoft Edge и Mozilla.

Скриншот: Skillbox Media

На заметку: если расширение доступно для Chrome, то запустить его можно в любом браузере, работающем на хромовском движке Blink, — например, в Opera, Vivaldi или «Яндекс.Браузере».

Шаг 2. В репозитории проекта напротив каждого файла появятся чекбоксы — отметьте галочками те, которые хотите скачать.

Шаг 3. Нажмите на кнопку загрузки в правом нижнем углу.

Скриншот: Skillbox Media

Готово! Можно наслаждаться новыми возможностями до боли знакомого сервиса.

По умолчанию в мобильной версии GitHub нет функции скачивания файлов. Но её можно активировать, если открыть в мобильном браузере версию сайта для ПК. После этого можно будет скачать отдельный файл либо весь проект в виде ZIP-архива.

Если нужен проект целиком:

Шаг 1. Откройте веб-страницу нужного репозитория через Google Chrome.

Шаг 2. В контекстном меню браузера нажмите на кнопку «Версия для ПК».

Шаг 3. После этого страница перезагрузится и откроется обычная десктопная версия сайта. Нажмите зелёную кнопку Code, а потом — Download ZIP.

Скриншот: Skillbox Media

Если нужен отдельный файл:

Шаг 1. Откройте на GitHub страницу файла и активируйте версию для ПК.

Шаг 2. Когда откроется десктопная версия страницы, нажмите кнопку Raw в правом верхнем углу.

Шаг 3. Снова вызовите контекстное меню браузера и нажмите на значок загрузки в самом верху — после этого на смартфон скачается нужный файл в формате .txt.

Скриншот: Skillbox Media

К сожалению, на iOS десктопная версия GitHub не открывается ни в одном браузере, поэтому функции Raw и Download ZIP недоступны. Если у вас есть рабочий способ — напишите нам в редакцию, добавим его в статью.

В этой статье мы обсудили нюансы работы только с веб-версией GitHub. Если хотите полностью перенести проект на свой компьютер и работать с ним локально, почитайте нашу статью про GitHub Desktop. Вы узнаете, как создать репозиторий, синхронизировать его с ПК и обновлять файлы удалённо.

Ещё можно почитать материал про систему контроля версий Git. Объясняем на понятных схемах, как работает технология, которая лежит в основе GitHub и других похожих сервисов. Вы поймёте, как там всё устроено, и сможете блеснуть знаниями на собеседовании.

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

Участвовать

Школа дронов для всех
Учим программировать беспилотники и управлять ими.

Узнать больше


Download Article


Download Article

When you view individual files on GitHub, you’ll notice the button to download the code isn’t there. You’ll instead see the download button on the right side of the page when you navigate to the root of the repository. This wikiHow will teach you how to download files from GitHub by changing to the Raw version of the file.

Steps

  1. Image titled Download a File from GitHub Step 1

    1

    Go to https://github.com/ in a web browser. You can use any web browser to download files.

  2. Image titled Download a File from GitHub Step 2

    2

    Navigate to the file you want to download. Use the search bar at the top of the page to find the file you want to download and the results will list repositories that match your search.

    Advertisement

  3. Image titled Download a File from GitHub Step 3

    3

    Click Releases (if it’s available). You’ll see this option on the right side of the browser.

    • Once you click Releases, you can click to download the installer or the source code.
    • If there is no Releases available, continue following these steps to download a file.
  4. Image titled Download a File from GitHub Step 4

    4

    Click Go to file. You’ll see this above the list of files within this repository next to a button to download all the files.

  5. Image titled Download a File from GitHub Step 5

    5

    Click to select a file that you want to download. It’ll open within GitHub in your web browser.

  6. Image titled Download a File from GitHub Step 6

    6

    Click Raw. You’ll see this next to Blame and a monitor icon above the space where the file displays.[1]

    • The page will redirect to display the file contents without any GitHub headers, footers, or menus.
  7. Image titled Download a File from GitHub Step 7

    7

    Right-click the page and click Save as. Alternatively, you can press the keyboard shortcut Ctrl/CMD + S.

    • Your file manager will open so you can select a name and location to save the file.
    • If you want to download the entire repository instead, navigate to the root (click the first half of the link, which is usually before any /), click the button with the download icon (it will usually say Code), and click Download ZIP. [2]
  8. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Video

Thanks for submitting a tip for review!

About This Article

Article SummaryX

1. Go to https://github.com/ in a web browser.

2. Navigate to the file you want to download.
3. Click Releases (if it’s available).

4. Click Go to file.

5. Click to select a file that you want to download.

6. Click Raw .

7. Right-click the page and click Save as.

Did this summary help you?

Thanks to all authors for creating a page that has been read 362,452 times.

Is this article up to date?


Download Article


Download Article

When you view individual files on GitHub, you’ll notice the button to download the code isn’t there. You’ll instead see the download button on the right side of the page when you navigate to the root of the repository. This wikiHow will teach you how to download files from GitHub by changing to the Raw version of the file.

Steps

  1. Image titled Download a File from GitHub Step 1

    1

    Go to https://github.com/ in a web browser. You can use any web browser to download files.

  2. Image titled Download a File from GitHub Step 2

    2

    Navigate to the file you want to download. Use the search bar at the top of the page to find the file you want to download and the results will list repositories that match your search.

    Advertisement

  3. Image titled Download a File from GitHub Step 3

    3

    Click Releases (if it’s available). You’ll see this option on the right side of the browser.

    • Once you click Releases, you can click to download the installer or the source code.
    • If there is no Releases available, continue following these steps to download a file.
  4. Image titled Download a File from GitHub Step 4

    4

    Click Go to file. You’ll see this above the list of files within this repository next to a button to download all the files.

  5. Image titled Download a File from GitHub Step 5

    5

    Click to select a file that you want to download. It’ll open within GitHub in your web browser.

  6. Image titled Download a File from GitHub Step 6

    6

    Click Raw. You’ll see this next to Blame and a monitor icon above the space where the file displays.[1]

    • The page will redirect to display the file contents without any GitHub headers, footers, or menus.
  7. Image titled Download a File from GitHub Step 7

    7

    Right-click the page and click Save as. Alternatively, you can press the keyboard shortcut Ctrl/CMD + S.

    • Your file manager will open so you can select a name and location to save the file.
    • If you want to download the entire repository instead, navigate to the root (click the first half of the link, which is usually before any /), click the button with the download icon (it will usually say Code), and click Download ZIP. [2]
  8. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Video

Thanks for submitting a tip for review!

About This Article

Article SummaryX

1. Go to https://github.com/ in a web browser.

2. Navigate to the file you want to download.
3. Click Releases (if it’s available).

4. Click Go to file.

5. Click to select a file that you want to download.

6. Click Raw .

7. Right-click the page and click Save as.

Did this summary help you?

Thanks to all authors for creating a page that has been read 362,452 times.

Is this article up to date?

Even though this is fairly an old question, I have my 2 cents to share.

You can download the repo as tar.gz as well

Like the zipball link pointed by various answers here, There is a tarball link as well which downloads the content of the git repository in tar.gz format.

curl -L http://github.com/zoul/Finch/tarball/master/

A better way

Git also provides a different URL pattern where you can simply append the type of file you want to download at the end of url. This way is better if you want to process these urls in a batch or bash script.

curl -L http://github.com/zoul/Finch/archive/master.zip

curl -L http://github.com/zoul/Finch/archive/master.tar.gz

To download a specific commit or branch

Replace master with the commit-hash or the branch-name in the above urls like below.

curl -L http://github.com/zoul/Finch/archive/cfeb671ac55f6b1aba6ed28b9bc9b246e0e.zip    
curl -L http://github.com/zoul/Finch/archive/cfeb671ac55f6b1aba6ed28b9bc9b246e0e.tar.gz --output cfeb671ac55f6b1aba6ed28b9bc9b246e0e.tar.gz

curl -L http://github.com/zoul/Finch/archive/your-branch-name.zip
curl -L http://github.com/zoul/Finch/archive/your-branch-name.tar.gz --output your-branch-name.tar.gz

Задача: форкнуть репозиторий в GitHub, создать ветку и работать с кодом.

Сразу появляется много вопросов — что такое GitHub, какие для этого нужны команды, зачем, а главное, как всем этим пользоваться? Давайте разберёмся.


Когда мы пишем код, мы постоянно туда что-то добавляем, удаляем, и иногда всё может ломаться. Поэтому перед любыми изменениями стоит сделать копию проекта. Если собирать проекты в папки с именами проект1, проект1_финали проект2_доделка, вы быстро запутаетесь и точно что-нибудь потеряете. Поэтому для работы с кодом используют системы контроля версий.

Система контроля версий — программа, которая хранит разные версии одного документа, позволяет переключаться между ними, вносить и отслеживать изменения. Таких систем много и все они работают по принципу компьютерной игры, где вы можете вернуться к месту сохранения, если что-то пошло не так.

Git — самая популярная система контроля версий. С Git можно работать через командную строку (или терминал). В каждой системе своя встроенная программа для работы с командной строкой. В Windows это PowerShell или cmd, а в Linux или macOS — Terminal.

Вместо встроенных программ можно использовать любую другую — например, Git Bash в Windows или iTerm2 для macOS.

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

Но давайте по порядку — установим Git на компьютер.

Устанавливаем и настраиваем Git

Windows. Скачайте Git для Windows, запустите exe-файл, следуйте инструкциям.

macOS. Скачайте Git для macOS и запустите dmg-файл. Если он не запускается, зайдите в Системные настройки — Безопасность и нажмите кнопку Open anyway (Всё равно открыть).

Linux. Установите Git через встроенный менеджер пакетов. Если у вас Ubuntu, используйте команду sudo apt-get install git. Команды для других дистрибутивов можно посмотреть здесь.

Как проверить, что Git установился

Откройте терминал и введите команду

Если Git установлен, то вы увидите номер версии, например, 2.35.1.

➜  ~ git --version
git version 2.35.1
➜  ~

Настраиваем Git

Теперь нужно ввести имя и адрес электронной почты, чтобы ваши действия в Git были подписаны, а ещё для привязки к GitHub.

Добавить имя (введите его внутри кавычек):

git config --global user.name "ваше имя"

Добавить электронную почту (замените email@example. com на вашу почту):

git config --global user.email email@example.com

Опция --global значит, что имя и почта будут использоваться для всех ваших действий в Git. Если вы хотите менять эту информацию для разных проектов, то вводите эти же команды, только без опции --global.

Регистрируемся на GitHub

GitHub (или Гитхаб) — веб-сервис на основе Git, который помогает совместно разрабатывать IT-проекты. На Гитхабе разработчики публикуют свой и редактируют чужой код, комментируют проекты и следят за новостями других пользователей.

Профиль на Гитхабе и все проекты в нём — ваше публичное портфолио разработчика, поэтому нужно завести профиль, если у вас его ещё нет.

  1. Зайдите на сайт https://github. com и нажмите кнопку Sign up.
  2. Введите имя пользователя (понадобится в дальнейшей работе), адрес электронной почты (такой же, как при настройке Git) и пароль.
  3. На почту придёт код активации — введите на сайте.
  4. Появится окно с выбором тарифного плана. Если вы пользуетесь Гитхабом для учёбы, то укажите, что профиль нужен только для вас и вы студент.
  5. Опросы и выбор интересов можно пропустить.

На этом всё — вы зарегистрировались и у вас есть собственный профиль.

Устанавливаем SSH-ключи

Чтобы получить доступ к проектам на GitHub со своего компьютера и выполнять команды без постоянного ввода пароля, нужно, чтобы сервер вас узнавал. Для этого используются SSH-ключи.

SSH — протокол для безопасного соединения между компьютерами.

SSH-ключ состоит из двух частей — открытого и закрытого ключа. Открытый ключ мы отправляем на сервер. Его можно не прятать от всех и не переживать, что кто-то его украдёт, потому что без закрытого ключа он бесполезен. А вот закрытый ключ — секретная часть, доступ к нему должен быть только у вас. Это важно.

Мы будем подключаться к GitHub по SSH. Это работает так:

  1. Вы отправляете какую-то информацию на GitHub, который знает ваш открытый ключ.
  2. GitHub по открытому ключу понимает, что вы это вы, и отправляет что-то в ответ.
  3. Только вы можете расшифровать этот ответ, потому что только у вас есть подходящий закрытый ключ.

А чтобы подключиться к GitHub с помощью SSH-ключа, сначала нужно его создать.

Проверяем SSH-ключи

Перед созданием нового SSH-ключа проверим, есть ли на компьютере другие ключи. Обычно они лежат в папке с названием .ssh — поэтому посмотрим, есть ли в ней что-то, с помощью команды в терминале:

Если у вас уже есть SSH-ключ, то в списке будут файлы с именами вроде id_rsa.pub, id_ecdsa.pub или id_ed25519.pub. А если терминал ругается, что директории ~/.ssh не существует, значит, у вас нет SSH-ключей. Давайте это исправим.

Создаём новый SSH-ключ

Откройте терминал и скопируйте туда эту команду. Не забудьте подставить в кавычки почту, на которую вы регистрировались на Гитхабе.

ssh-keygen -t ed25519 -C "your_email@example.com"

ed25519 — это алгоритм для генерации ключей. Если ваша система не поддерживает алгоритм ed25519 (и вы увидели ошибку), используйте немного другую команду с алгоритмом rsa:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Терминал спросит, куда сохранить ключ. Если не хотите менять имя файла, которое предлагает терминал, просто нажмите Enter.

> Generating public/private имя-ключа key pair.
> Enter a file in which to save the key (/c/Users/ваш-профиль/.ssh/id_имя-ключа):*[Press enter]*

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

В результате создаётся новый SSH-ключ, привязанный к вашей электронной почте.

Создание ключа по шагам:

ssh-explained.png

Добавляем SSH-ключ в ssh-agent

ssh-agent — программа для хранения и управления SSH-ключами. Давайте запустим её и добавим туда наш SSH-ключ. Запускаем командой eval "$(ssh-agent -s)":

Если в ответ терминал покажет надпись «Agent pid» и число — значит, всё ок, агент запущен.

Теперь добавим наш ключ командой.

ssh-add ~/.ssh/id_ed25519

Если у вашего ключа другое имя, замените название id_ed25519 именем файла с ключом (это правило применяется и дальше в инструкции). Если вы устанавливали пароль на ключ, введите его два раза после ввода команды ssh-add (терминал подскажет, когда это сделать).

Теперь, если всё хорошо, появится надпись Identity added — значит, можно переходить к добавлению ключа на GitHub.

Копируем SSH-ключ

Чтобы добавить ключ на GitHub, нужно сначала его скопировать из вашего файла командой clip. Вы не увидите ключ на экране, но он появится в буфере обмена, и его можно будет вставить на Гитхаб.

clip < ~/.ssh/id_ed25519.pub

Команда clip может не сработать на вашем компьютере, тогда есть два способа узнать ключ — простой и сложный.

Сложный способ. Найдите скрытую папку .ssh, откройте файл id_ed25519.pub в текстовом редакторе и скопируйте его содержимое.

Простой способ. Введите команду ниже и ключ появится прямо в терминале — его нужно вручную скопировать в буфер обмена. Ключ начинается с ssh-ed22519 или ssh-rsa (или похожей строки) — поэтому копируйте строку прямо с самого начала.

~ cat ~/.ssh/id_ed25519.pub

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO63MT6VCFuZtCLhLj1J6I7dgEU2BsRdIsnvnr4ax+Fr shklyar@htmlacademy.ru

Не копируйте этот ключ из статьи — он уже не работает.

Добавляем SSH-ключ на GitHub

Это нужно сделать, чтобы GitHub вас узнавал.

Перейдите на страницу для работы с ключами в вашем профиле на GitHub и нажмите кнопку New SSH key.

github_addnew.png

В поле Title нужно добавить название нового ключа. Например, если вы используете Mac, вы можете назвать ключ MacBook Air, или, если ключ для курсов Академии, то Academy. А ключ, который вы скопировали на прошлом шаге, вставьте в поле Key.

ssh-add-github.png

Не копируйте ключ со скриншота — он уже не работает.

Теперь нажмите кнопку Add SSH key и, если потребуется, введите свой пароль от GitHub, чтобы подтвердить сохранение. Если всё сделано верно, новый ключ появится в списке на странице https://github. com/settings/keys.

github-added-key.png

Теперь мы можем поработать с проектом в репозитории.

Что такое репозиторий

Репозиторий — папка с файлами вашего проекта на сервере GitHub. Так вы можете работать с проектом откуда угодно, не переживая, что какие-то файлы потеряются — все данные останутся в репозитории.

Если над проектом работает несколько программистов, сначала создаётся мастер-репозиторий — это общий репозиторий с рабочей версией проекта. А каждый программист работает с форком — то есть полной копией мастер-репозитория. В форке вы можете безнаказанно менять код и не бояться что-то сломать в основной версии проекта.

Делаем форк мастер-репозитория

Заходим в нужный репозиторий и нажимаем на «вилку» с надписью fork.

fork.png

Появится окно Create a new fork — проверьте, что он называется так, как вам нужно, и жмите кнопку Create fork. Через пару секунд всё готово.

fork-details.png

Клонируем форк на компьютер — git clone

Клонировать форк — значит скачать его, чтобы работать с кодом на своём компьютере. Тут нам и пригодится SSH.

Открываем терминал и переходим в папку с будущим проектом — для этого используем команду cd your-project. Если вы хотите, чтобы проект лежал в папке device, введите

Если такой папки на компьютере нет, то сначала введите md your-project, чтобы создать эту папку, а затем cd your-project. Подробнее о командах.

Когда перейдёте в папку, введите команду git clone для клонирования репозитория:

git clone git@github.com:your-nickname/your-project.git

Замените your-nickname на ваше имя пользователя на GitHub, а your-project — на название проекта. Проще всего их найти прямо наверху страницы репозитория.

Если вы правильно настроили SSH-ключи, Git скопирует репозиторий на ваш компьютер.

➜  device git clone git@github.com:academy-student/1173761-device-34.git
Клонирование в «1173761-device-34»…
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 0), reused 15 (delta 0), pack-reused 0
Получение объектов: 100% (15/15), 145.07 КиБ | 900.00 КиБ/с, готово.

Если вы видите ошибку Error: Permission denied (publickey), скорее всего, вы ошиблись в настройке SSH-ключа. Вернитесь в этот раздел инструкции и повторите процесс настройки.

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

git clone git@github.com:_your-nickname_/_your-project_.git folder_name

Теперь на вашем компьютере в папке your_project или в той, название которой вы указали, находится полная копия репозитория c GitHub.

В каждом репозитории есть как минимум одна основная ветка, которую создаёт сам Git — она называется master. Обычно в ней хранят проверенную версию программы без ошибок.

А если вы хотите исправить ошибку в коде или добавить что-то в проект, но не хотите сломать код в основной ветке, нужно создать новую ветку из master и работать из неё. Каждая ветка — что-то вроде второстепенной дороги, которая затем снова соединится с основной.

Создаём новую ветку — git branch

Откройте терминал и введите команду

Она показывает список веток, с которыми мы работаем в проекте, и выделяет текущую. Если мы находимся в master , то создаём новую ветку командой

git checkout -b имя-новой-ветки.
➜  1173761-device-34 git:(master) git checkout -b task1
Переключено на новую ветку «task1»
➜  1173761-device-34 git:(task1)

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

Мы делаем это, чтобы новая ветка содержала свежую рабочую версию проекта. Если вы ошиблись в названии, например, допустили опечатку, вы можете изменить название ветки с помощью команды:

git branch -m старое-имя-ветки новое-имя-ветки.

Сохраняем изменения — git add

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

Если вы хотите сохранить изменения не во всех файлах, для начала введите команду git status. Она покажет текущее состояние в вашей ветке, а именно список с названиями изменённых файлов, если они есть, и укажет на те, которые ожидают записи и сохранения (обычно они выделены красным цветом).

git-status.png

Чтобы сохранить все изменения разом, используйте команду

Чтобы сохранить изменения только отдельных файлов, укажите их имена вручную. Например, если вы изменили файл index.html, введите

Если название очень длинное, вы начните его писать, нажмите Tab и терминал сам предложит продолжение пути к файлу.

Делаем коммит — git commit

Сделать коммит — значит зафиксировать все сохранённые изменения и дать им название. Это делается с помощью команды commit

git commit -m "ваше сообщение"

Текст сообщения должен быть лаконичным и вместе с этим сообщать о том, что делает коммит (внесённые изменения). Например,

  • Добавляет имя наставника в Readme
  • Вводит функцию сортировки изображений
  • Правит ошибку в поиске городов на карте

git-commit.png

Отправляем изменения на GitHub — git push

Сохранённые изменения пока не видны коллегам, потому что находятся в нашем локальном репозитории. Нужно отправить коммиты на GitHub. Для этого введите команду

git push origin название-текущей-ветки

Где origin означает репозиторий на компьютере, то есть ваш форк. Слово origin — часть команды, не меняйте это название на своё.

git-push-origin.png

Создаём пулреквест

Пулреквест (или PR) — это предложение изменить код в репозитории. PR должен проверить администратор мастер-репозитория — это может быть коллега-разработчик, техлид или наставник на курсе.

Если к коду нет вопросов, пулреквест принимается. Если нужно что-то исправить — отклоняется, и придётся исправить код и снова пройти цепочку git addgit commitgit push. Если вы и дальше работаете в той же ветке, а пулреквест ещё не принят, все ваши изменения автоматически добавятся в пулреквест, созданный из этой ветки после команды git push origin название-текущей-ветки.

Чтобы создать пулреквест, зайдите на страницу вашего форка на GitHub. Вверху появилась плашка Compare & pull request, а ещё можно зайти на вкладку Pull Requests.

pr-offer.png

Нажмите на неё и окажетесь на странице открытия пулреквеста. Проверьте описание и нажмите Create pull request.

pr-stage2.png

Готово, теперь ждём остаётся ждать одобрения пулреквеста или комментариев к нему.

Синхронизируем репозитории

Предположим, вы исправили код, руководитель или наставник одобрил ваши правки и принял пулреквест.

pr-closed.png

Теперь код в мастер-репозитории обновился, а в вашем форке нет, вы ведь не обновляли свою версию репозитория с тех пор, как клонировали её себе на компьютер. Приведём форк в актуальное состояние.

В локальном репозитории переключаемся на ветку master.

Забираем изменения из ветки master мастер-репозитория

git pull git@github.com:academy-student/1173761-device-34.git master

Отправляем изменения уже из своей ветки master в ваш форк на GitHub с помощью команды

Готово, теперь форк и оригинальный репозиторий находятся в актуальном состоянии.

Словарик

Система контроля версий — программа, которая хранит разные версии одного документа, позволяет переключаться между ними, вносить и отслеживать изменения.

Git — самая популярная система контроля версий. С Git можно работать через терминал.

Как работает терминал: мы вводим команду и получаем ответ компьютера — или всё получилось, или где-то ошибка, или нужно ввести что-то ещё.

GitHub (или Гитхаб) — веб-сервис, основанный на Git, который помогает совместно разрабатывать IT-проекты. На Гитхабе разработчики публикуют свой и редактируют чужой код, комментируют проекты и следят за новостями других пользователей.

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

ssh-agent — программа для хранения и управления SSH-ключами.

Репозиторий — папка с файлами вашего проекта на сервере GitHub или у вас на компьютере.

Мастер-репозиторий  это общий для всей команды репозиторий с рабочей версией проекта.

Форк — полная копия мастер-репозитория, в которой вы можете безопасно работать.

Клонировать форк — скачать его командой git clone, чтобы работать с кодом на своём компьютере.

Пулреквест (или PR) — предложение изменить код в репозитории. PR должен проверить администратор мастер-репозитория — это может быть коллега-разработчик, техлид или наставник на курсе.

Другие материалы по Git

  • Введение в системы контроля версий
  • Шпаргалка по Git. Решение основных проблем
  • Полезные команды для работы с Git

GitHub is one of the largest developer resources, and an absolute must-know for aspiring web developers to explore and share projects online.

person using a computer do download from github

If you’re just starting out with git and GitHub, taking open-source code from GitHub to experiment with or add to your own projects is one great way to learn. To do that, you’ll need to learn the basics: getting a file from GitHub onto your computer.

Download Now: 35 Code Templates [Free Snippets]

In this post, we’ll show you how to download different resources from GitHub. We’ll cover:

  • downloading a file
  • downloading a repository
  • downloading a release
  • downloading multiple files

Let’s get started.

To download a single file from GitHub, follow these steps:

1. Navigate to the GitHub repository page that contains the file. If it’s a public repository, you can visit the page without logging in. If it’s a private repository, you’ll need to log in and have the proper permissions to access it.

2. From the main repository page, locate the file you want to download. You can do this by navigating the folders, or by clicking Go to File near the top of the page. This opens a list of all files in the repository that you can search.

file search in github

3. Click the file you want to download. This will open the file in GitHub.

4. On the file page, click the Raw button. This opens the raw code in your browser.

the raw code view in github

5. Right-click the page and select Save as…, then name the file and choose where to save it on your device.

How to Download a GitHub Repository

GitHub is made up of repositories. A repository is a place where all files in a project can be stored, accessed, tracked, and modified. To download a repository, follow these steps:

1. Navigate to the GitHub repository page. If it’s a public repository, you can visit the page without logging in. If it’s a private repository, you’ll need to log in and have the proper permissions to access it.

2. On the main repository page, click the green Code button.

the main github page with the code button circled

3. In the menu that appears, click Download ZIP. The entire repository will be downloaded to your device as a zipped file.

the github download zip button

With that, you should be able to open the file locally.

How to Download a Release From GitHub

Repositories may also put out releases, which are packaged versions of the project. To download a release:

1. Navigate to the GitHub repository page. If it’s a public repository, you can visit the page without logging in. If it’s a private repository, you’ll need to log in and have the proper permissions to access it.

2. Click Releases, located on the right-side panel.

the releases option int he github side panel

3. You’ll be brought to a page listing releases from newest to oldest. Under the release that you want to download, locate the Assets section. Click a file under this section to download it.

assets in the github releases menu

You’ll be able to open this zipped file on your local device.

How to Download Multiple Files From GitHub

Unless you want to download an entire repository or release, there’s currently no way to bulk-download multiple files from GitHub. Depending on how many files you need from a repository, it may be best to download each individual file you need, or download the entire repository/release and delete the files you don’t need.

Get files from GitHub.

There’s a lot to learn when it comes to using GitHub — the platform packs a ton of features, and it can seem intimidating to newcomers. However, GitHub does an excellent job of making its tools simple and accessible. Case in point: downloading a single file or an entire repository is possible with just a few clicks.

coding templates

Вступлениe

Здравствуй, дорогой читатель, эта статья будет про то, как устанавливаются утилиты из GitHub на разных ОС(операционных системах), тебя ждет впереди много интересного!

Наверное, каждый пробовал скачивать утилиты с GitHub по видео-гайдам из ютуба «Как хакнуть пентагон за секунду« или »бесплатный телеграм скрапер участников». Эти громкие названия действительно работают и ничего не понимающие люди идут скачивать утилиту с GitHub, потому что с её помощью можно взломать подругу и разведать её интимки.

Но нас это не интересует. В гите находится огромное количество инструментов для OSINT, аналогов которым не найти. Сегодня мы глубоко в GitHub лезть не будем, а лишь узнаем, как же использовать этот неиссякаемый инструментарий.

*Внимание, переконцентрация слова GitHub

GitHub — крупнейший веб-сервис для размещения IT-проектов и их совместной разработки. На нем хостятся ваши проекты, утилиты, фотки и что угодно.

Практика

На GitHub свыше 100000+ утилит(небольших программ) и каждая по-своему уникальна, отличаются они способом установки и языком программирования, на котором написана сама утилита и, если в зависимости от языка, эта установка меняется кардинально и поэтому приходится разбираться с документацией по установке скрипта(набор строк кода), смотреть гайды по установке или в последнюю очередь — обращаться к людям, знающим язык программирования, на котором написан код.

На страничке мы видим: разбор и объяснение про репозиторий(любой проект, размещенный на GitHub); это мы пропускаем и идем к пункту Installing — здесь рассказано, на каких ОС утилита работает (Windows/Linux/MacOs/Termux) .

Что написано:

apt-get update -y
apt-get install git
git clone https://github.com/Red-company/RDDoS_Tool.git
cd RDDoS_Tool
bash setup.sh
python3 RDDoS_Tool.py

Первое поле — это обновление пакетов(комплектующих системы) с помощью конкретного пакетного менеджера в ОС линукс

Второе поле — установка GIT

Третье поле — установка утилиты с помощью GIT, также можно и с помощью веб-интерфейса GitHub скачать

Четвертое поле — это переход в директорию(папка в файловой системе)

Пятое поле — это запуск .sh скрипта с помощью Bash

Шестое поле — это запуск основного скрипта с помощью python(язык на котором и написана сама утилита)

Некоторые пункты будут пропущены, потому что не соответствуют структуре ОС

Установка с помощью Windows

Второе, установка GIT, читаем мануал

Третье, скачивание утилиты с GitHub, нажимаем комбинацию клавиш > Win+R пишем > powershell делаем > запустить; переходим на рабочий стол cd «c:\Usersваш юзернеймDesktop» пишем заветную команду:

git clone https://github. com/Red-company/RDDoS_Tool. git

Также это можно сделать с помощью веб-интерфейса, на скрине сверху нажимаем Download ZIP и перемещаем из папки Загрузок на рабочий стол

Четвертое, переходим в директорию именно с помощью терминала, но сначала убедитесь, в какой директории вы находитесь и не находитесь ли вы в корневой директории. Для этого используем команду :

cd RDDoS_Tool

Пятое, запускаем установочный скрипт bash setup. sh, но на виндовс он работать не будет, на странице написано, что нужно сделать так, значит делаем вручную как сказано

pip install tqdm
pip install pyfiglet

А также устанавливаем python, потому что это будет нужно для исполнения основного файла ТЫК

Шестое, запускаем сам python скрипт

python3 RDDoS_Tool. py

Установка с помощью Linux

Если у вас пакетный менеджер apt(проверьте методом тыка), то смело делаем все как в установке показано:

apt-get update -y
apt-get install git
git clone https://github.com/Red-company/RDDoS_Tool.git
cd RDDoS_Tool
bash setup.sh
python3 RDDoS_Tool.py

Если у вас другой пакетный менеджер, то следуем инструкции дальше!

  • 1. Это обновление пакетов, вам нужно посмотреть как обновлять пакеты на вашем линукс-дистрибутиве(разновидность ОС Linux) и обновить
  • 2. Установка GIT и опять же посмотрите, как установить GIT на вашем дистрибутиве линукс
  • 3.Установка утилиты, тут по аналогии с виндовс действуем:

Переходим в директорию рабочего стола cd $HOME/Desktop/ и устанавливаем:

git clone https://github. com/Red-company/RDDoS_Tool. git

4. Переход в директорию

5. Исполнение Bash-скрипта, если у вас не пакетный менеджер APT, то устанавливаем пакеты вручную. А знаю я это, потому что нужно посмотреть в код setup. sh и посмотреть, как исполняется этот скрипт и что делает, примерно можно понять, что он делает и для какого ПМ(наиболее популярная утилита управления пакетами для Linux систем) он работает

pip install tqdm
pip install pyfiglet

С помощью вашего ПМ установите python:

sudo apt install python

6. Запуск скрипта

python3 RDDoS_Tool. py

Как узнать, какой у меня дистрибутив линукс? ТЫК

Установка с помощью Android

Чтобы исполнять код, нам нужно скачать Termux и прочитать, что это такое на вики

Делаем все по аналогии с оригинальной установкой, а также с линуксом, попутно устанавливая git, python, pip, пакеты pip

apt-get update -y
apt-get install git
git clone https://github.com/Red-company/RDDoS_Tool.git
cd RDDoS_Tool
bash setup.sh
python3 RDDoS_Tool.py

Установка с помощью MacOS

MacOS в первую очередь основан на Unix, а это значит, что почти все команды у него совпадают с Linux-установкой и поэтому делаем все также, только вместо apt-get используем пакетный менеджер MacOS > brew

brew update
brew install git
git clone https://github.com/Red-company/RDDoS_Tool.git
cd RDDoS_Tool
bash setup.sh
python3 RDDoS_Tool.py

Не забываем про установку git, python, pip, пакеты pip, которые по умолчанию должны быть на MacOS, но лучше обезопаситься:

brew install python git python-pip

Потренируйтесь

В довесок оставлю здесь небольшую подборку инструментов с GitHub, в установке которых вы можете опробовать свои силы:

Больше можно найти на нашем канале :

Вывод

Сегодня мы разобрали основные способы установки утилит из GitHub, теперь вы можете смело использовать репозитории, безостановочно публикующиеся в OSINT-каналах.

Спасибо за прочтение этой статьи!

Разберемся, что такое удаленный репозиторий, и как настроить работу с ним. А также узнаем о наиболее удачной модели ветвления.

Git. Урок 6.
Работа с удаленным репозиторием.
Модель ветвления.
Команды: clone, fetch, push, pull.

Разберемся, что такое удаленный репозиторий, и как настроить работу с ним. А также узнаем о наиболее удачной модели ветвления.

Smartiqa Git cover

Команды: clone, fetch, push, pull

Оглавление

Теоретический блок

1. Что такое удаленный репозиторий.
2. Настройка подключения удаленного репозитория. Группа команд git remote.

2.1. Добавление удаленного репозитория к существующему локальному. Команда git remote add.
2.2. Настройка подключения по HTTPS.
2.3. Настройка подключения по SSH.
2.4. Отключение удаленного репозитория от локального. Команда git remote remove.
2.5. Изменение имени удаленного репозитория. Просмотр всех удаленных репозиториев. Команды git remote rename, git remote show.
3. Клонирование удаленного репозитория. Команда git clone.
4. Получение изменений из удаленного репозитория. Команда git fetch.
5. Получение изменений из удаленного репозитория. Команда git pull.
6. Отправка изменений в удаленный репозиторий. Команда git push.
7. GitHub. Работа с репозиторием, создание форков и пулл-реквестов

7.1 Создание репозитория на GitHub
7.2 Страница репозитория на GitHub.
7.3. Создание форка репозитория на GitHub. Пулл-реквесты.
8. Модель ветвления Git
8.1. Центральный репозиторий
8.2. Основные ветки
8.3. Вспомогательные ветки
8.4. Feature-ветки.
8.5. Release-ветки.
8.6. Hotfix-ветки.

Перейти

Практический блок

1. Задание
2. Решение

Перейти

ТЕОРЕТИЧЕСКИЙ БЛОК

Что такое удаленный репозиторий

Сегодня мы познакомимся с новым понятием: удаленный репозиторий. В прошлых уроках, преимущественно в практических частях, мы уже не раз затрагивали некоторые команды для работы с удаленным репозиторием, но не говорили о них подробно. Пора это исправить!

Важно
Отметим, что здесь и далее, в качестве примера, мы будем использовать сервис хостинга удаленных репозиториев GitHub. Мы предпочитаем этот сервис за его популярность и множество дополнительных функций, о которых будет рассказано ниже. Тем не менее, если вам больше нравится другой сервис, процесс работы не будет сильно отличаться.

    Для начала давайте повторим информацию из предыдущих уроков.

    1. Распределенная система контроля версий – такая система, в которой участники хранят у себя на компьютере полную копию всех версий проекта. Такой принцип делает их независимыми от рабочего сервера.
    2. Git относится к распределенным системам контроля версий.

    Чтобы вы точно вспомнили, приведем диаграмму из первого урока:

    Распределенная система контроля версий

    Распределенная система контроля версий

    Возможно у вас возникнет вопрос: при чем здесь удаленные репозитории? Все просто: сервер по центру диаграммы и есть удаленный репозиторий. Дадим более точное определение.

    Удаленный (иногда говорят «внешний») репозиторий – это версии вашего проекта, сохраненные на удаленном сервере. Доступ к репозиторию на таком сервере может осуществляться по интернету или по локальной сети.

    Удаленный репозиторий – полноценный репозиторий, ничем не отличающийся от локального. У удаленного репозитория есть собственные ветки, собственный указатель HEAD, своя история коммитов и так далее.

    Если мы подключим удаленный репозиторий к своему локальному, то у нас появятся копии всех ссылочных объектов удаленного репозитория. То есть, например, у удаленного репозитория есть ветка main, а у нас будет копия этой ветки – origin/main. Все такие ссылочные объекты (указатели, ветки и теги) удаленного репозитория хранятся почти там же, где и у локального – в директории .git/refs/remotes/<имя_удаленного_репозитория>.

    Кстати
    Принято называть удаленные ветки (то есть ветки удаленных репозиториев), приписывая к их названию имя удаленного репозитория. Например, если у нас есть удаленный репозиторий с именем origin и веткой main, то мы будем называть такую ветку origin/main. То же мы будем делать и со всеми остальными ссылочными объектами. Это может показаться излишним, но на самом деле это добавляет определенности и позволяет не запутаться в многочисленных названиях веток.

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

      Таким образом, чтобы стать полноценным пользователем Git, важно овладеть навыками работы с удаленным репозиторием. Среди них – создание новых и копирование к себе уже существующих удаленных репозиториев, загрузка на сервер локальных коммитов и скачивание изменения с сервера. Давайте изучим все это по порядку.

      Настройка подключения удаленного репозитория. Группа команд git remote.

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

      Для управления подключением удаленных репозиториев в Git предусмотрена целая группа команд – git remote. Мы рассмотрим самые частоиспользуемые команды из этой группы.

      2.1. Добавление удаленного репозитория к существующему локальному. Команда git remote add.

      Давайте разберемся, как добавить удаленный репозиторий к вашему локальному репу. Для этого в Git есть команда git remote add.

      Команда git remote add

      Формат

      git remote add <название удаленного репозитория> <ссылка на удаленный репозиторий>

      Что делает

      Подключает удаленный репозиторий к вашему под переданным именем.

      Пример

      # Подключим удаленный репозиторий под именем origin $ git remote add origin git@github.com:smartiqaorg/geometric_lib.git

      Возможно у вас возникнут вопросы: что такое имя удаленного репозитория, и откуда взять ссылку на него. Ответим на них по порядку.

      Имя удаленного репозитория в команде git remote add вы можете придумать сами. Впоследствии, при работе с этим удаленным репозиторием, вы будете обращаться к нему по придуманному имени. Принято называть удаленный репозиторий origin, но строго говоря, никаких ограничений здесь нет.

      Со ссылкой
      на удаленный репозиторий тоже все просто. Мы работаем с GitHub, поэтому эту ссылку можно взять, нажав на большую зеленую кнопку Code на странице репозитория на GitHub.

      Получение ссылки на удаленный репозиторий

      Получение ссылки на удаленный репозиторий

      Вам предложат выбрать одну из трех ссылок: для протоколов https и ssh и для клиента GitHub на компьютер. Вот примеры этих трех ссылок для репозитория geometric_lib известного вам по практическим занятиям этого курса:

      1. HTTPS-ссылка: https://github.com/smartiqaorg/geometric_lib.git
      2. SSH-ссылка: git@github.com:smartiqaorg/geometric_lib.git
      3. GitHub CLI ссылка: gh repo clone smartiqaorg/geometric_lib

      Давайте разберемся, в чем отличие. Начнем с последней — эта ссылка используется в клиенте GitHub, который нужен для упрощения работы с Git. Этот клиент можно поставить отдельно, но его возможности значительно ограничены по сравнению с консольным вариантом Git.

      Итак, с последней ссылкой все понятно: ее нужно использовать в специальной программе для компьютера с графическим UI от создателей GitHub. Но в чем разница между первыми двумя?

      Дело в том, что существует два основных протокола подключения к git-серверу: HTTPS и SSH. SSH считается более надежным, но он немного сложнее в настройке. Давайте разберемся, как настроить подключение для каждого из них. А окончательный выбор протокола оставим на вкус читателя.

      2.2. Настройка подключения по HTTPS

      Раньше можно было подключаться по HTTPS, используя имя пользователя и пароль от аккаунта GitHub. Но потом эту возможность отключили в целях безопасности. Сейчас вместо пароля нужно использовать персональный токен. Давайте разберемся, как создать такой токен.

      Итак, чтобы создать токен персонального доступа, следуйте инструкции:
      1. Подтвердите свой email-адрес, который вы использовали при регистрации аккаунта GitHub (если он не подтвержден

      2. Кликните на свою аватарку в правом верхнем углу, в открывшемся окне выберите Settings (Настройки):

      3. Перед вами откроются настройки. В меню слева выберите Developer settings (Настройки разработчика)

      4. Перед вами откроются Настройки разработчика. В меню слева выберите Personal access tokens (токены персонального доступа).

      5. Нажмите Generate new token (сгенерировать новый токен)

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

      7. Дайте токену разрешения. Пользователь токена сможет выполнять с удаленным репозиторием только то, что вы указали в этих разрешениях. Чтобы дать токену доступ к управлению удаленным репозиторием из командной строки, выберите repo.

      8. Нажмите Generate token (сгенерировать токен).

      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
      

      9. Скопируйте токен. В целях безопасности, как только вы покинете страницу создания токена, вы больше не сможете просмотреть этот токен.

      Отлично, ваш токен готов! При первой загрузке/скачивании изменений из удаленного репозитория, вас попросят ввести имя пользователя на GitHub и пароль. Нужно будет ввести свое имя пользователя, а вместо пароля вставить этот токен.

      2.3. Настройка подключения по SSH

      Чтобы настроить подключение по SSH, вам нужно на своем компьютере сгенерировать два SSH-ключа: публичный (public) и секретный (private).

      Немного про SSH
      Как работает SSH протокол и зачем ему ключи? Если коротко, то публичный ключ передается на удаленный сервер, а секретный все время остается с вами. Удаленный сервер использует публичный ключ, чтобы удостовериться, что у вас действительно есть секретный ключ. Как только сервер убеждается в наличии у вас секретного ключа, он понимает, что вы – это вы, ведь секретный ключ нельзя подделать.

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

      Про SSH агента
      SSH-агент – это специальная программа, которая сохраняет пароль от файла с секретным ключом и помогает удаленному серверу удостовериться, что вы действительно владеете секретным ключом. Благодаря SSH-агенту, вам не потребуется при каждом подключении к удаленному серверу вводить пароль от файла с приватным ключом.

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

      1. Откройте Git Bash (или терминал, если вы работаете на Linux/MacOS)
      2. Выполните в нем команду ssh-keygen -t rsa 4096 -C «<ваша-почта>@example.com»
      2.1. Вам предложат ввести путь к директории, в которой будет сохранен ключ, а также будет выведена директория для сохранения по умолчанию. Нажмите Enter, чтобы выбрать директорию по умолчанию, либо введите любую другую директорию и тоже нажмите Enter.
      2.2. Затем вам предложат ввести пароль для файла с секретным ключом. Нажмите Enter, чтобы оставить файл без пароля, либо введите пароль и нажмите Enter.
      3. Теперь нужно добавить ключ в SSH-агента. Запустим агента командой eval `ssh-agent -s`
      4. Теперь выполните команду ssh-add <путь до приватного ключа>. Если вы оставили путь по умолчанию, ваша команда будет выглядеть так: ssh-add ~/.ssh/id_ed25519
      5. Отлично, последний этап: добавляем публичный ключ на GitHub. Для этого откройте файл с публичным ключом (он должен иметь расширение .pub). Если вы оставили путь по умолчанию, то ваш ключ будет располагаться по адресу ~/.ssh/id_ed25519.pub.
      6. Скопируйте содержимое файла.
      7. Перейдите в настройки GitHub
      8. Откройте раздел SSH and GPG keys (ssh и gpg ключи)

      Раздел “SSH and GPG keys” и кнопка “New SSH key”

      Раздел «SSH and GPG keys» и кнопка «New SSH key»

      9. Нажмите New SSH key (новый ssh-ключ)
      10. В поле Title (заголовок) введите содержательное название ключа, например ключ для ноутбука или ключ рабочего компьютера

      Заполнение полей SSH ключа

      Заполнение полей SSH ключа

      11. Скопированный ключ вставьте в раздел Key (ключ)
      12. Нажмите Add SSH key (добавить ssh-ключ)
      13. Возможно потребуется ввести пароль для подтверждения действия.

      Теперь SSH-ключ добавлен. Вам больше не нужно вводить имя пользователя и пароль при каждой загрузке или скачивании изменений из удаленного репозитория.

      2.4. Отключение удаленного репозитория от локального. Команда git remote remove.

      Иногда возникает необходимость забыть удаленный репозиторий. Для этого существует команда git remote remove.

      Команда git remote remove

      Формат

      git remote remove <название удаленного репозитория>

      Что делает

      Отключает переданный удаленный репозиторий от вашего.

      Пример

      # Отключим удаленный репозиторий с именем origin
      $ git remote remove origin

      Данная команда предельно проста в использовании. В качестве имени репозитория нужно передавать то имя, которое вы указывали в команде git remote add. Заметьте, данная команда не удаляет удаленный репозиторий с сервера, она удаляет только подключение вашего репозитория к удаленному.

      2.5. Изменение имени удаленного репозитория. Просмотр всех удаленных репозиториев. Команды git remote rename, git remote show.

      Иногда возникает необходимость переименовать удаленный репозиторий. Для этого существует команда git remote rename.

      Команда git remote rename

      Формат

      git remote rename <старое имя удаленного репозитория> <новое имя удаленного репозитория>

      Что делает

      Меняет имя переданного удаленного репозитория

      Пример

      # Переименуем удаленный репозиторий с origin на upstream
      $ git remote rename origin upstream

      Еще более частая задача – просмотреть список всех подключенных удаленных репозиториев и получить информацию о каждом из них. Для этого существует команда git remote show.

      Команда git remote show

      Формат

      git remote show [имя удаленного репозитория]

      Что делает

      Выводит список всех подключенных удаленных репозиториев. Если передано имя репозитория, то выводит информацию об этом репозитории.

      Пример

      # Выведем список всех удаленных репозиториев
      $ git remote show
      origin
      upstream

      # Выведем информацию про репозиторий origin
      $ git remote show origin
      * remote origin
      Fetch URL: git@github.com:smartiqaorg/geometric_lib.git
      Push URL: git@github.com:smartiqaorg/geometric_lib.git
      HEAD branch: develop
      Remote branch:
      develop new (next fetch will store in remotes/origin)
      Local ref configured for ‘git push’:
      dev pushes to develop (up to date)

      Таким образом можно просмотреть информацию о каждом из подключенных удаленных репозиториев.

      Клонирование удаленного репозитория.
      Команда git clone.

      Теперь, когда мы разобрались с настройкой подключения удаленного репозитория к уже существующему, давайте узнаем, как можно склонировать удаленный репозиторий к себе на компьютер. Операция клонирования создаёт на вашем компьютере точную копию удаленного репозитория.

      Необходимость клонировать существующий удаленный репозиторий возникает в ситуациях, когда вы решаете поработать над уже существующим кодом. Для выполнения этой операции в Git предусмотрена команда git clone.

      Команда git clone

      Формат

      git clone <ссылка на удаленный репозиторий>

      Что делает

      Клонирует переданный репозиторий на ваш компьютер.

      Пример

      # Склонируем себе репозиторий geometric_lib
      $ git сlone https://github.com/smartiqaorg/geometric_lib.git

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

      Заметьте, что клонирование по https возможно вообще всегда, а по ssh – нет. Чтобы клонировать репозитории по ssh, нужно, чтобы владелец удаленного репозитория на GitHub добавил к себе публичный ssh-ключ из пары, в то время, как секретный ssh-ключ от той же пары хранится у вас на компьютере, с которого вы выполняете git clone. Таким образом, если вы настроили ssh в своем аккаунте, то вы сможете беспрепятственно клонировать свои репозитории и по https, и по ssh. Но если вы пытаетесь клонировать чужой репозиторий по ssh, то скорее всего получите ошибку доступа.

      Важно
      Окончательный выбор протокола для клонирования, конечно, остается за читателем. Работать по https проще и быстрее, зато он считается менее защищенным, чем ssh, который в свою очередь труднее в настройке.

      Давайте на примере разберем, как происходит клонирование. Клонируем уже знакомый нам репозиторий geometric_lib. При выполнении команды git сlone https://github.com/smartiqaorg/geometric_lib.git произойдет следующее:

      1. В директории, откуда вы запустили команду git clone, создается директория с именем репозитория. В нашем случае, если мы выполнили команду из директории пользователя, будет создана папка C:userssmartiqageometric_lib.
      2. В созданную директорию копируется репозиторий, все его ветки и коммиты.
      3. В новосозданный локальный репозиторий добавляется удаленный репозиторий с именем origin и ссылкой, которую мы передавали в git clone. Это избавляет нас от необходимости вручную писать git remote add origin https://github.com/smartiqaorg/geometric_lib.git. На этом процесс клонирования заканчивается.

      Кстати
      Вместо git clone можно было бы создать пустой локальный git-репозиторий, выполнив команду git init. Затем подключить наш удаленный репозиторий командой git remote add origin https://github.com/smartiqaorg/geometric_lib.git. После чего вручную загрузить изменения с удаленного репозитория командой git pull, которую мы рассмотрим ниже. Но зачем делать что-то вручную, если для этого есть автоматизированный инструмент из коробки.

      Получение изменений из удаленного репозитория. Команда git fetch

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

      У вас может возникнуть вопрос: зачем получать изменения, если только я загружаю их в свой удаленный репозиторий? Все верно, если вы работаете один, то вряд ли вам пригодится загружать изменения из удаленного репозитория в локальный. Но если вы работаете в команде, вы будете по несколько раз в день обновлять свой репозиторий, загружая в него коммиты, сделанные другими разработчиками из вашей команды.

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

        Команда git fetch

        Формат

        git fetch [ключи] [имя удаленного репозитория]

        Что делает

        Получает изменения из переданного удаленного репозитория. Если не было передано ни одного удаленного репозитория, ни ключа —all, команда пытается получить изменения из репозитория с именем origin.

        Пример

        # Получим изменения из удаленного репозитория
        $ git fetch origin

        Важным замечанием здесь станет то, что команда не обновляет рабочую копию в соответствии с удаленным репозиторием. Она обновляет только ссылочные объекты (указатели, ветки и теги) и скачивает все необходимые файлы в директорию .git/objects.

        Давайте рассмотрим пример, чтобы разобраться, что на самом деле делает git fetch. Допустим, у нас есть репозиторий, к которому подключен удаленный репозиторий. Структура рабочих копий и логи выглядят следующим образом:

        ├── alpha.txt
        └── num.txt
        
        * 47573c7 | 2021-05-10 | Initial commit | [Smartiqa] |  (HEAD -> dev, origin/develop)

        ├── alpha.txt
        ├── new_file.txt
        └── num.txt
        
        * b9ad22e | 2021-05-10 | New commit | [Smartiqa] |  (HEAD -> develop, origin/develop)
        * 47573c7 | 2021-05-10 | Initial commit | [Smartiqa] |

        Как видно, в удаленном репозитории есть один коммит, которого нет у нас. В этом коммите был добавлен файл new_file.txt. Кроме того видно, что наша копия удаленной ветки origin/dev находится на первом коммите, хотя должна быть на втором. Чтобы обновить информацию для этой ветки, нам и понадобится git fetch. Выполним команду git fetch origin:

        $ git fetch origin
        remote: Enumerating objects: 4, done.
        remote: Counting objects: 100% (4/4), done.
        remote: Compressing objects: 100% (2/2), done.
        remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
        Unpacking objects: 100% (3/3), 287 bytes | 143.00 KiB/s, done.
        From github.com:smartiqaorg/test-repo
           47573c7..b9ad22e  develop -> origin/develop

        В выводе команды видно, что она скачала несколько объектов, а из последней строчки мы узнаем, что ветка develop удаленного репозитория была записана в ветку origin/develop на нашем компьютере.

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

        ├── alpha.txt
        └── num.txt
        
        * b9ad22e | 2021-05-10 | New commit | [Smartiqa] |  (origin/develop)
        * 47573c7 | 2021-05-10 | Initial commit | [Smartiqa] |  (HEAD -> develop)
        

        На первый взгляд может показаться, что произошло что-то очень странное: новый коммит появился, а файл, который он добавляет – нет. На самом деле, файл тоже появился, просто рабочая копия не была обновлена. Это видно и из истории репозитория: у нас есть две отдельные ветки: develop и origin/develop. Причем указатель HEAD, который, как мы помним, отвечает за состояние рабочей копии, находится на ветке develop. Что ж, давайте попробуем выполнить самое очевидное: переключим HEAD на ветку origin/develop.

        $ git checkout origin/develop
        Note: switching to 'origin/develop'.
        
        You are in 'detached HEAD' state. You can look around, make experimental
        changes and commit them, and you can discard any commits you make in this
        state without impacting any branches by switching back to a branch.
        
        If you want to create a new branch to retain commits you create, you may
        do so (now or later) by using -c with the switch command. Example:
        
          git switch -c <new-branch-name>
        
        Or undo this operation with:
        
          git switch -
        
        Turn off this advice by setting config variable advice.detachedHead to false
        
        HEAD is now at b9ad22e New commit

        Вот это да, мы как-то оказались в состоянии detached HEAD, хотя вроде бы переключались на ветку. Сейчас разберемся с этим, но сначала давайте проверим, обновилась ли наша рабочая копия:

        ├── alpha.txt
        ├── new_file.txt
        └── num.txt

        Все как мы и ожидали, новый файл появился в рабочей копии. Но почему мы оказались в состоянии detached HEAD, если переключались на ветку? Все просто: хоть origin/develop и считается веткой, это ветка не нашего, а удаленного репозитория. Если вы сделаете какие-то коммиты или как-то еще попытаетесь изменить ветку origin/develop, все эти изменения будут потеряны при следующем git fetch. Файл .git/refs/remotes/origin/develop, в котором хранится хэш коммита, на который указывает ветка origin/develop, будет просто переписан. В него запишется тот хэш, на который указывает ветка удаленного репозитория. Все коммиты, которые вы самостоятельно сделали на этой ветке, будут утеряны: на них не останется ссылок. Отсюда и состояние detached HEAD.

        Но что же делать, – спросите вы, – как объединить две ветки в одну? В прошлом уроке мы изучили специально созданную для этого команду – git merge.

        # Переключимся обратно на ветку develop
        $ git checkout develop
        Switched to branch 'develop'
        Your branch is behind 'origin/develop' by 1 commit, and can be fast-forwarded.
          (use "git pull" to update your local branch)
        
        # Сольем ветку origin/develop в ветку develop
        $ git merge origin/develop
        Updating 47573c7..b9ad22e
        Fast-forward
         new_file.txt | 1 +
         1 file changed, 1 insertion(+)
         create mode 100644 new_file.txt

        После выполнения git checkout даже сам Git напомнил нам, что наша ветка отстает от origin/develop на 1 коммит. Правда, он посоветовал выполнить git pull вместо git merge, но уже в следующем разделе мы поймем, что это одно и то же.

        Кстати, в выводе команды git merge можно заметить, что слияние прошло в fast-forward режиме. Именно поэтому не было создано merge-коммита. На самом деле, слияние удаленной ветки очень часто можно выполнить в fast-forward режиме, но иногда все-таки приходится разрешать конфликты и создавать merge-коммиты.

        Подведем итог
        Команда git fetch используется для синхронизации локальных ссылочных объектов с этими же объектами в удаленном репозитории. Рабочую копию она не меняет.
        Чтобы синхронизировать локальную рабочую копию с удаленным репозиторием, нужно слить удаленные ветки в локальные. Сделать это можно уже знакомой командой git merge.

        Получение изменений из удаленного репозитория. Команда git pull

        Связкой git fetch && git merge мы получили изменения из удаленного репозитория и обновили свою рабочую копию. Часто вместо этого хочется получать изменения и сразу обновлять рабочую копию так, чтобы она соответствовала удаленному репозиторию. И для этого в Git существует отдельная команда. Называется она git pull.

        Команда git pull

        Формат

        git pull [ключи] [имя удаленного репозитория]

        Что делает

        Получает изменения из переданного удаленного репозитория и обновляет рабочую копию в соответствии с удаленным репозиторием. По умолчанию слияние удаленной ветки с локальной происходит именно в fast-forward режиме, так что включать его специально не требуется

        Пример

        # Обновим нашу рабочую копию в соответствии с удаленным репозиторием
        $ git fetch origin

        На самом деле, новых команд здесь нет. Команда git pull это просто сокращение последовательного применения git fetch и git merge. Но используется git pull намного чаще.

        Подведем итог
        Команда git pull используется для синхронизации локальной рабочей копии и всех ссылочных объектов с удаленным репозиторием.
        По сути, git pull — это то же самое, что git fetch + git merge.

        Отправка изменений в удаленный репозиторий. Команда git push

        Мы знаем почти все про удаленный репозиторий. Осталось изучить, как загружать в него свои локальные изменения. Для этого в Git существует команда git push.

        Команда git push

        Формат

        git push [ключи] [имя удаленного репозитория] [имя ветки]

        Что делает

        Загружает изменения в удаленный репозиторий. Если слияние изменений в удаленном репозитории нельзя сделать в режиме fast-forward, и при этом не был передан ключ force, выполнение закончится с ошибкой.

        Пример

        # Загрузим все изменения с текущей ветки в удаленный репозиторий
        $ git push origin develop

        По факту данная команда аналогична связке git fetch + git merge, но выполненной из удаленного репозитория (это просто аналогия, на самом деле так сделать не получится).

        Давайте более подробно разберем, как работает эта команда. Допустим, мы выполнили git push origin develop в нашем локальном репозитории. Возможны три варианта развития событий.

        Если изменения с нашей ветки можно слить с удаленной веткой в режиме fast-forward, то есть на удаленной ветке нет коммитов сделанных после наших, то все пройдет нормально.

        Если на удаленной ветке есть коммиты, которые были сделаны позже наших, то есть слияние в режиме fast-forward выполнить невозможно, то команда завершится с ошибкой. Ведь в этом случае есть угроза перезаписи истории удаленного репозитория и удаления всех коммитов, созданных позже наших.

        Но если вы вдруг передали флаг —force, то все коммиты, которых нет в вашем локальном репозитории, будут удалены. То есть удаленный репозиторий станет точной копией вашего локального. Есть более щадящая версия этого флага – —force-with-lease. Он будет делать в точности то же самое, но если вдруг нужно будет удалить коммит, созданный не вами, выполнение немедленно прекратится и вернется ошибка. Таким образом, вы не попадете в ситуацию, когда вы случайно удалили чужой коммит.

        GitHub. Работа с репозиторием,
        создание форков и пулл-реквестов

        Научившись работать с локальным репозиторием, освоим основы работы с GitHub. Итак, если коротко, то GitHub – это, наверное, самый популярный сервис бесплатного хостинга удаленных репозиториев с множеством дополнительных функций. Среди них есть, например, создание issue – запросов, в которых можно сообщить разработчикам об ошибках, создание репозиториев-форков и пулл-реквестов. Кроме того, на GitHub можно подписаться на обновления какого-то конкретного пользователя или включить отслеживание репозитория вашего любимого проекта. Все это превращает GitHub в настоящую социальную сеть для разработчиков по всему миру. Давайте приступим к изучению основ работы с этим сервисом.

        7.1 Создание репозитория на GitHub

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

        Чтобы создать свой репозиторий, нажмите на зеленую кнопку New, как показано на рисунке.

        Создание репозитория - кнопка “New”

        Создание репозитория — кнопка «New»

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

        1. Итак, первое поле Repository name – имя репозитория. Здесь все просто, вам нужно придумать имя, которое будет отображаться на странице вашего репозитория. Здесь нет никаких ограничений, но старайтесь давать как можно более содержательные имена своим репозиториям.
        2. Второе поле – Description – описание. Его заполнять необязательно. Но другим пользователям, которые попали на страницу вашего репозитория, будет проще понять, что перед ними, если вы заполните графу описания.
        3. Затем вы можете выбрать, будет ли репозиторий открытым, то есть доступным абсолютно всем пользователям GitHub, или закрытым, то есть доступным только вам и людям, которым вы предоставите доступ.
        4. Последние три поля предлагают нам добавить, соответственно, README-файл, .gitignore файл и выбрать лицензию для нашего проекта.

        После заполнения полей страница выглядит примерно так.

        Заполненная страница создания репозитория

        Заполненная страница создания репозитория

        Заметьте, мы не стали вводить описание репозитория, поскольку решили добавить в него README-файл, хотя иногда и можно продублировать самую основную информацию из README в описании.

        Завершим процесс создания репозитория, нажав кнопку Create repository.

        7.2 Страница репозитория на GitHub.

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

        Страница репозитория на GitHub

        Страница репозитория на GitHub

        Как видно из рисунка, GitHub автоматически создал первый коммит, добавив в него файл .gitignore и файл README.

        Кстати, можно заметить, что содержимое файла README выводится под рабочей копией репозитория. Это одна из особенностей GitHub. Вы в любое время можете создать файл с именем README.md и запушить его в свой удаленный репозиторий на GitHub. Тогда содержимое этого файла будет отображаться прямо на странице вашего репозитория.

        В верхнем меню мы видим 9 разных вкладок. Давайте разберем их по порядку.

        1. Вкладка Code. Сейчас открыта именно она. В ней содержится рабочая копия нашего репозитория (по центру), описание (справа), вывод файла README (под рабочей копией), история коммитов, а также кнопки для клонирования репозитория и просмотра файлов.
        2. Вкладка Issues. В этой вкладке будут отображаться все запросы, сделанные другими пользователями. Как правило, пользователи используют запрос, чтобы сообщить о найденном баге, либо чтобы задать какой-то вопрос о вашем приложении.
        3. Вкладка Pull-requests. На этой вкладке будут отображаться все пулл-реквесты, сделанные другими пользователями. О том, что такое пулл-реквесты, мы поговорим ниже.
        4-5. Вкладки Actions и Project относятся скорее к системе CI/CDI, которую предоставляет GitHub, в этом курсе мы не будем затрагивать их.
        6. Вкладка Wiki открывает вам доступ к созданию и размещению документации о собственном проекте.
        7. На вкладке Security содержатся различные настройки безопасности вашего проекта. Там же можно включить инспекцию вашего кода, чтобы узнать, если вы случайно загрузите какой-нибудь секретный токен на GitHub.
        8. Вкладка Insight содержит различную информацию и статистические данные об активности репозитория. Там вы сможете посмотреть на зависимость количества коммитов в репозитории от времени или на процент коммитов, сделанных вами.
        9. Последняя вкладка – Settings. В ней находятся различные настройки вашего репозитория. Там вы можете поменять видимость репозитория, сделав его частным, или вовсе удалить репозиторий.

        7.3. Создание форка репозитория на GitHub. Пулл-реквесты.

        Итак, одной из самых важных частей GitHub является создание форков.

        Форк (от англ. fork – вилка) – точная копия репозитория, но в вашем аккаунте. Форки нужны, чтобы вносить свои изменения в проект, к репозиторию которого у вас нет прямого доступа.

        Пулл-реквест (от англ. pull-request – запрос pull) – функция GitHub, позволяющая попросить владельца репозитория, от которого мы сделали форк, загрузить наши изменения обратно в свой репозиторий.

        Если коротко, форки и пулл-реквесты нужны, чтобы любой пользователь мог внести свой вклад в любой открытый проект, репозиторий которого есть на GitHub. Кроме того, перед тем как влить ваши изменения в основной репозиторий, ответственные обязательно проверят ваш код на наличие ошибок и уязвимостей. Таким образом, даже если ваши изменения не примут, вы получите первоклассный code-review с указанием всех неточностей.

        Теперь давайте рассмотрим пайплайн контрибуции (англ. contribution – внесение вклада) на примере реального репозитория. То есть научимся вносить свой вклад в разработку проектов с открытым исходным кодом на GitHub.

        1. Для начала зайдем на страницу репозитория проекта. Нажимаем на кнопку Fork, как показано на картинке. После этого Git создаст точную копию этого репозитория в вашем аккаунте.

        Кнопка Fork

        Fork-нутый репозиторий

        2. Клонируем репозиторий к себе на компьютер командой git clone. Создадим файл README.md с описанием проекта, чтобы другим пользователям было понятно, в чем отличие этой реализации от остальных.

        3. Сделаем коммит и выполним git push, чтобы загрузить наши изменения в удаленный репозиторий.

        4. Теперь GitHub подсказывает нам, что наша ветка опережает ветку исходного репозитория на один коммит и предлагает сделать пулл-реквест.

        Подсказка GitHub

        5. Нажимаем на кнопку Compare на подсказке GitHub, либо переходим на вкладку Pull Requests и нажимаем New pull request.

         Создание пулл-реквеста

        6. Перед нами откроется страница создания пулл-реквеста.

        Страница пулл-реквеста

        Здесь мы можем просмотреть внесенные изменения и выбрать две ветки: одну в исходном репозитории, на нее будут залиты наши изменения, вторую – в нашем репозитории, с нее будут скачаны изменения. Как только мы выбрали ветки и убедились, что не внесли никаких лишних изменений, нажимаем кнопку Create pull request.

        7. Теперь мы попадаем на страницу описания наших изменений.

        Описание пулл-реквеста

        Здесь необходимо описать, что за изменения вы внесли и почему они были необходимы. Сообщение, которое оставили мы, видно на картинке. Оно отражает суть и необходимость внесенных изменений. Как только мы закончили с описанием, можно нажимать кнопку Create pull request.

        8. Теперь мы попадаем на страницу уже созданного пулл-реквеста в изначальном репозитоии. В нашем случае он выглядит так.

        Страница созданного пулл-реквеста

        Страница созданного пулл-реквеста

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

        Подытожим
        Таким образом, вы можете вносить свой вклад в абсолютно любые приложения с открытым программным кодом. Даже репозиторий самого Git хранится на GitHub, и вы в любой момент можете сделать форк и придумать новую команду (правда не факт, что ответственный примет ваш пулл-реквест). Вы можете внести свой вклад в разработку ядра Linux, в популярный редактор Visual Studio Code, в ядро криптовалюты Bitcoin, в языки программирования Python, Go, Ruby – все эти проекты имеют открытые репозитории на GitHub.

        Модель ветвления Git

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

        8.1. Центральный репозиторий

        Итак, основой нашей модели будет центральный репозиторий. Строго говоря, в Git не может быть никаких центральный репозиториев, поскольку это распределенная система контроля версий. Поэтому центральный репозиторий является таковым только с точки зрения логики его использования, с технической же точки зрения – это точно такой же репозиторий, как и все остальные. У каждого из разработчиков в команде есть копия основного репозитория. Схематически ситуация выглядит так.

        Основной репозиторий проекта (origin) и репозитории разработчиков

        Основной репозиторий проекта (origin) и репозитории разработчиков

        Центральный репозиторий на картинке назван origin. Как мы уже упоминали выше, это одно из общепринятых наименований в Git.

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

        8.2. Основные ветки

        В нашей модели существуют две главные ветки:

        1. main – ветка, в которой содержится только код, готовый к релизу.
        2. develop – ветка, в которой содержатся изменения, готовые ко включению в последующий релиз.

        Эти ветви называются главными, поскольку существуют в центральном репозитории и всех его копиях все время. Логика работы с ними не предполагает их удаления после выпуска очередного релиза, в отличие от, например, вспомогательных ветвей группы release.

        Как только в ветке develop появляется достаточно изменений для создания нового релиза, она вливается в ветку main (напрямую или посредством создания специальной ветки release-*, о которой мы поговорим позже). После чего соответствующий коммит слияния в ветке main помечается тегом с указанием версии релиза (напомним, что тег – это статический указатель, нужный для удобства переключения между коммитами).

        Таким образом, коммит в ветке origin/main означает выпуск нового релиза. Кстати, если строго придерживаться этого правила, можно организовать непрерывную интеграцию при помощи как встроенных средств GitHub, так и сторонних инструментов, специализирующихся на CI/CDI.

        8.3. Вспомогательные ветки

        Чтобы поддерживать независимость разработки отдельных частей проекта, наша модель включает в себя несколько групп вспомогательных ветвей. Главное отличие таких ветвей от главных в том, что срок жизни этих ветвей ограничен. После завершения выполнения определенной работы, вспомогательная ветвь вливается в одну из главных, после чего удаляется.

        Наша модель предполагает существование следующих групп вспомогательных ветвей:

        1. Ветви для разработки новых функций. Они же feature branches.
        2. Ветви релизов, то есть release branches.
        3. Ветви срочных исправлений – hotfix branches.

        Чуть ниже мы разберем предназначение каждой группы. Кроме того, мы договоримся о правилах создания, именования и слияния ветвей из каждой группы. Конечно, Git не ограничивает ни в именах ветвей, ни в чем либо другом, – эти условности мы придумываем сами. Тем не менее, такие правила необходимы для облегчения взаимодействия нескольких разработчиков внутри одного большого проекта.

        8.4. Feature-ветки

        Могут порождаться от: develop
        Могут вливаться в: develop
        Правило именования: любое имя, кроме main, develop, release-*, hotfix-*.

        Ветки функциональности используются для разработки новых функций, для которых неизвестно: будут ли они добавлены в ближайший релиз или же в какой-то более поздний. Основной смысл такой ветки в том, что живет она ровно столько, сколько продолжается разработка функции, для которой была создана эта ветка. В это время в ветке main могут выходить релизы, не затрагивающие разрабатываемую функцию. По завершении создания функции, такая ветка либо вливается в ветку develop, либо удаляется, если эксперимент с новой функцией не удался.

        Feature-ветки существуют в основном только в репозиториях разработчиков, но могут на некоторое время появиться и в центральном репозитории.

        Графически взаимодействие разработчика с feature-веткой выглядит примерно так:

        Работа с feature-веткой в репозитории разработчика

        Работа с feature-веткой в репозитории разработчика

        Создать feature-ветку можно следующим образом:

        # Переключимся на главную ветвь develop
        $ git checkout develop
        # Создадим feature-ветку
         $ git checkout -b new-feature

        После завершения работы над функцией, вы можете выполнить слияние и Push:

        # Переключимся на главную ветвь develop
        $ git checkout develop
        # Сольем нашу feature-ветку явным образом
         $ git merge --no-ff new-feature
        # Удалим нашу feature-ветку
         $ git branch -d new-feature
        # Выполним пуш изменений в основной репозиторий
         $ git push origin develop

        Заметьте, мы специально выполнили merge в режиме non-fast-forward. Дело в том, что хоть fast-forward и удобнее в некоторых случаях, в данном все же лучше использовать явное слияние. Явное слияние позволяет сохранить информацию о том, что ветка new-feature существовала, и объединяет все ее коммиты в один merge-коммит. Впоследствии это позволит разобраться, какие коммиты отвечают за добавление одних и тех же функций. Кроме того, сливая ветку явным образом, мы оставляем себе обходной путь: отменить такое слияние намного проще, чем отменять слияние fast-forward.

        8.5. Release-ветки

        Могут порождаться от: develop
        Могут вливаться в: develop, main
        Правило именования: release-*

        Ветки релизов необходимы для подготовки к выпуску новых релизов вашего продукта. Их главное назначение – внести финальные штрихи перед выпуском новой версии. В этих ветках можно вносить небольшие изменения и подготавливать файлы с метаданными о версии вашего продукта. Release-ветку следует создавать в тот момент, когда ваш проект готов или почти готов к выпуску очередной версии. По крайней мере не раньше, чем вся функциональность, предназначенная к выходу в этом релизе, будет влита в ветку develop.

        Решение о номере версии релиза принимается только после создания release-ветки и опирается на принятые в компании правила нумерации версий. До тех пор неясно, будет ли новый релиз иметь версию 4.1.5, 4.2 или 5.0. Создать release-ветку можно следующим образом.

        # Переключимся на главную ветвь develop
        $ git checkout develop
        # Создадим release-ветку
         $ git checkout -b release-4.2

        Заметьте, мы приняли решение, что новая версия будет иметь номер 4.2, а потому создали ветку с именем release-4.2. Работая в этой ветке, мы можем исправить незначительные ошибки и внести метаинформацию о версии проекта в соответствующие файлы. Обратите внимание, что на этой ветви запрещено вносить какие-то крупные изменения или исправлять серьезные ошибки, ее предназначение не в этом.

        Как только все файлы вашего проекта будут готовы к выпуску релиза, данную ветвь можно слить в основную ветку main, что и будет соответствовать выпуску релиза. После чего нужно пометить релиз соответствующим тегом, чтобы впоследствии к нему было проще обращаться. Важно не забыть слить изменения с release-ветки в ветку develop, чтобы вернуть наши незначительные изменения в процесс разработки следующего релиза.

        # Переключимся на основную ветвь main
        $ git checkout main
        # Сольем в нее нашу release-ветку
        $ git merge --no-ff release-4.2
        # Присвоим коммиту тег
        $ git tag -a v4.2
        # Переключимся на основную ветку develop
        $ git checkout develop
        # Сольем в нее нашу release-ветку, чтобы вернуть внесенные изменения в разработку
        $ git merge --no-ff release-1.2
        # Теперь можно удалить release-ветку
        $ git branch -d release-1.2

        8.6. Hotfix-ветки

        Могут порождаться от: main
        Могут вливаться в: develop, main
        Правило именования: hotfix-*

        Ветки срочных исправлений или hotfix-ветки, нужны для внесения срочных исправлений в уже вышедший релиз. Такую ветку необходимо создать в ситуации, когда в недавно вышедшем релизе был обнаружен серьезный баг. Предназначение этой ветки – исправить ошибку в последнем вышедшем релизе, а затем выпустить новый релиз, слив ветку hotfix в main и develop. Смысл создания отдельной ветки в том, что работа большей части команды может продолжаться над выходом нового стабильного релиза на ветке develop, пока bugfix-команда работает над исправлением ошибки в последнем релизе в ветке hotfix.

        Чтобы создать hotfix-ветку, выполните:

        # Переключимся на главную ветвь main
        $ git checkout main
        # Создадим hotfix-ветку для последнего релиза
         $ git checkout -b hotfix-4.2.1

        Последний релиз имеет номер 4.2, поэтому мы приняли решение, что релиз с исправлением бага в релизе 4.2 будет иметь версию 4.2.1.

        После внесения всех необходимых исправлений, нужно слить hotfix-ветку в ветку main, чтобы выпустить новый релиз, и в ветку develop, чтобы наши изменения сохранились в следующем релизе. Сделаем это.

        # Переключимся на основную ветвь main
        $ git checkout main
        # Сольем в нее нашу hotfix-ветку
        $ git merge --no-ff hotfix-4.2.1
        # Присвоим коммиту тег
        $ git tag -a v4.2.1
        # Переключимся на основную ветку develop
        $ git checkout develop
        # Сольем в нее нашу hotfix-ветку, чтобы сохранить исправление бага в следующем релизе 
        $ git merge --no-ff hotfix-4.2.1
        # Теперь можно удалить hotfix-ветку
        $ git branch -d hotfix-4.2.1

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

        ПРАКТИЧЕСКИЙ БЛОК

        Задание

        В теоретической части урока мы с вами научились работать с удаленными репозиториями и, в частности, сервисом хостинга удаленных репозиториев GitHub. Пора закрепить эти знания на практике. Как и в предыдущих уроках работать будем с уже знакомым нам репозиторием geometric_lib.

        Условие

        1. Зарегистрируйтесь на GitHub и подтвердите свою почту.

        2. Настройте SSH или HTTPS подключение (на ваш выбор). Мы будем работать по HTTPS.

        3. Теперь перейдите на страницу https://github.com/smartiqaorg/geometric_lib/ и создайте свой форк.

        4. Склонируйте к себе свой форк репозитория geometric_lib.

        5. Настройте локального пользователя Git

        6. Измените файл docs/README.md. Сделайте коммит.

        7. Выполните пуш ваших изменений в свой удаленный репозиторий. Заметьте, что вам не нужно добавлять удаленный репозиторий: он уже был добавлен под именем origin во время клонирования.

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

        9. Создайте пулл-реквест. В нем подробно опишите внесенные изменения. На странице предпросмотра пулл-реквеста проверьте, что вы не затронули файлы на других ветках и еще раз перепроверьте код

        Разбор задания

        На странице Задания и Ответы по курсу Git мы даем подробный разбор текущего задания.
        Приводим в нем не только команды Git, но и их консольный вывод, а также даем комментарии к каждой команде.

        Как вам материал?

        Читайте также

        Понравилась статья? Поделить с друзьями:
      1. Как скачать разрешение экрана 1920x1080 на windows 7
      2. Как скачать проект с github через консоль windows
      3. Как скачать проект на флешку с компьютера windows
      4. Как скачать программы офис для windows 10
      5. Как скачать программу торрент на windows 10