Прежде чем использовать Git, вы должны установить его на своём компьютере. Даже если он уже установлен, наверное, это хороший повод, чтобы обновиться до последней версии. Вы можете установить Git из собранного пакета или другого установщика, либо скачать исходный код и скомпилировать его самостоятельно.
Примечание
В этой книге используется Git версии 2.8.0. Хотя большинство используемых нами команд должны работать даже в старых версиях Git, некоторые из них могут не работать или действовать немного иначе, если вы используете старую версию. Поскольку Git отлично справляется с сохранением обратной совместимости, любая версия после 2.8 должна работать нормально.
Установка в Linux
Если вы хотите установить Git под Linux как бинарный пакет, это можно сделать, используя обычный менеджер пакетов вашего дистрибутива. Если у вас Fedora (или другой похожий дистрибутив, такой как RHEL или CentOS), можно воспользоваться dnf :
$ sudo dnf install git-all
Если же у вас дистрибутив, основанный на Debian, например, Ubuntu, попробуйте apt :
Как установить git и выложить программу на github? Первые шаги. Программирование на Java
$ sudo apt install git
Чтобы воспользоваться дополнительными возможностями, посмотрите инструкцию по установке для нескольких различных разновидностей Unix на сайте Git https://git-scm.com/download/linux.
Установка на Mac
Существует несколько способов установки Git на Mac. Самый простой — установить Xcode Command Line Tools. В версии Mavericks (10.9) и выше вы можете добиться этого просто первый раз выполнив ‘git’ в терминале.
$ git —version
Если Git не установлен, вам будет предложено его установить.
Если Вы хотите получить более актуальную версию, то можете воспользоваться бинарным установщиком. Установщик Git для OS X доступен для скачивания с сайта Git https://git-scm.com/download/mac.
Рисунок 7. OS X инсталлятор Git
Установка в Windows
Для установки Git в Windows также имеется несколько способов. Официальная сборка доступна для скачивания на официальном сайте Git. Просто перейдите на страницу https://git-scm.com/download/win, и загрузка запустится автоматически. Обратите внимание, что это отдельный проект, называемый Git для Windows; для получения дополнительной информации о нём перейдите на https://gitforwindows.org.
Для автоматической установки вы можете использовать пакет Git Chocolatey. Обратите внимание, что пакет Chocolatey поддерживается сообществом.
Установка из исходников
Многие предпочитают устанавливать Git из исходников, поскольку такой способ позволяет получить самую свежую версию. Обновление бинарных инсталляторов, как правило, немного отстаёт, хотя в последнее время разница не столь существенна.
Если вы действительно хотите установить Git из исходников, у вас должны быть установлены следующие библиотеки, от которых он зависит: autotools, curl, zlib, openssl, expat и libiconv. Например, если в вашей системе используется dnf (Fedora) или apt-get (системы на базе Debian), вы можете использовать одну из следующих команд для установки всех зависимостей, используемых для сборки и установки бинарных файлов Git:
Как СКАЧАТЬ проект с GitHub в PyCharm. Как клонировать репозиторий с ГИТХАБ через консоль
$ sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel $ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
Для того, чтобы собрать документацию в различных форматах (doc, html, info), понадобится установить дополнительные зависимости:
$ sudo dnf install asciidoc xmlto docbook2X $ sudo apt-get install asciidoc xmlto docbook2x
Примечание
Пользователи RHEL и производных от неё (таких как CentOS или Scientific Linux) должны подключить репозиторий EPEL для корректной установки пакета docbook2X
Если вы используете систему на базе Debian (Debian/Ubuntu/Ubuntu-производные), вам так же понадобится установить пакет install-info :
$ sudo apt-get install install-info
Если вы используете систему на базе RPM (Fedora/RHEL/RHEL-производные), вам так же понадобится установить пакет getopt , который уже установлен в системах на базе Debian:
$ sudo dnf install getopt
К тому же из-за различий имён бинарных файлов вам понадобится сделать следующее:
$ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi
Когда все необходимые зависимости установлены, вы можете пойти дальше и скачать самый свежий архив с исходниками из следующих мест: с сайта Kernel.org https://www.kernel.org/pub/software/scm/git, или зеркала на сайте GitHub https://github.com/git/git/releases. Конечно, немного проще скачать последнюю версию с сайта GitHub, но на странице kernel.org релизы имеют подписи, если вы хотите проверить, что скачиваете.
Затем скомпилируйте и установите:
$ tar -zxf git-2.8.0.tar.gz $ cd git-2.8.0 $ make configure $ ./configure —prefix=/usr $ make all doc info $ sudo make install install-doc install-html install-info
После этого вы можете получать обновления Git посредством самого Git:
$ git clone git://git.kernel.org/pub/scm/git/git.git
Источник: git-scm.herokuapp.com
Начало работы с Git
Git — система контроля версий. GitHub — сайт, предоставляющий Git-хостинг. Он служит заменой Git-сервера, если не хочется разворачивать сервер самостоятельно. Это место, где можно создать удаленный репозиторий и хранить там проект.
Необязательно использовать именно GitHub, помимо него существуют и другие Git-хостинги (например Assembla, Beanstalk). Но нельзя обойтись без системы Git на своем локальном компьютере. Поэтому рассмотрим, как ее установить.
Установка Git на компьютер
Скачать установочный файл последней версии можно здесь, Git можно установить на разные операционные системы, мы будем ставить на Windows.
По умолчанию устанавливается две программы: Git Bash — командная строка и Git GUI — графическая оболочка. Большинство пользуется командной строкой Git Bash. Мы тоже будем работать с Git Bash.
При установке лучше выбрать текстовый редактор Notepad++, это сэкономит кучу нервов и времени тем, кто не умеет работать с Linux и его редактором Vim.
Если Git уже установлен с другим редактором, то сменить редактор по умолчанию можно так:
git config core.editor notepad
После установки Git вы сможете его запустить в нужной папке, щелкнув ее правой кнопкой мыши и выбрав пункт «Git Bash Here» — очень удобная опция, так как не придется переходить в репозиторий из командной строки. То есть щелкать правой кнопкой мыши надо будет папку-репозиторий.
Итак, установили систему Git. Теперь надо создать аккаунт на GitHub и отправить туда свой проект.
Создание аккаунта на GitHub
Тут ничего сложного — понадобится имя пользователя, электронная почта и пароль.
После этого надо создать репозиторий на GitHub (create project). Он будет доступен по адресу:
https://github.com/логин/имя_репозитория
То есть если мы зарегистрируемся с логином javakitt и создадим репозиторий example, то он будет доступен по адресу:
https://github.com/javakitt/example
Теперь есть два варианта:
- Склонировать только что созданный пустой репозиторий себе на компьютер и начать в нем работать, то есть добавлять в него файлы и фиксировать изменения.
- Или наоборот, в том случае, если файлы у вас уже есть: инициализировать в своей рабочей папке репозиторий, а потом отправить его на GitHub.
Оба эти варианты расписаны на сайте — сразу после создания репозитория GitHub выдает страницу с командами, годными для каждого случая.
Создание приложения GitHub с помощью Node.js
Недавно GitHub обновил свою политику в отношении интеграции со сторонними приложениями. Раньше мы могли использовать токены личного доступа или приложения OAuth для автоматизации нашего взаимодействия с платформой. Теперь они добавили третий вариант — GitHub Apps.
Основное различие между приложениями OAuth и GitHub заключается в том, что сначала они действуют как авторизованный пользователь, который предоставил свои учетные данные, а последние действуют как отдельный объект после установки в организацию или репозиторий.
Поначалу это может немного сбивать с толку (как это было для меня), поэтому на GitHub у них даже есть блок-схема, чтобы решить, что вы должны построить. Как правило, если у вас есть задача, которая требует доступа к определенному набору ресурсов, а также действует скорее как приложение (или бот, если хотите), вы можете неплохо справиться с приложением GitHub.
На GitHub есть неплохие уроки по этим нововведениям. Но они используют только Ruby и охватывают довольно небольшое количество тем. Хотя применить эти руководства к среде Node.js не так уж сложно, я предпочитаю иметь удобную информацию для каждого инструмента, который я использую.
Сегодня мы рассмотрим довольно простой процесс, чтобы лучше понять природу приложений GitHub, а также создать свои собственные с помощью Node.js.
Вот задачу, которую мы собираемся решить. Допустим, у нас есть репозиторий с пакетом JavaScript, который используется в других наших проектах. Когда мы выпускаем новую версию пакета, мы не хотим обновлять версию, используемую во всей нашей организации.
Есть несколько вариантов, как мы можем подойти к этой задаче с GitHub Apps:
- Автоматизировано. При отправке в мастер (и, возможно, успешной сборке CI) перебрать все репозитории, которые упомянуты в разделе «Используется» метаданных нашего репозитория пакетов. Затем для каждого из таких репозиториев мы создаем ветку для обновления. В этой ветке измените файл «package.json», чтобы он соответствовал новой версии нашего пакета, и создайте Pull Request для ветки репозитория по умолчанию.
- Руководство по эксплуатации. Если у нас есть достаточно небольшое количество проектов, зависящих от нашего пакета, мы можем создать список всех таких репозиториев. Когда будет выпущена новая версия пакета, мы сможем просмотреть их и обновить так, как описано для полностью автоматизированного подхода.
В этом руководстве мы начнем с «ручного» способа (который на самом деле не является этим руководством, поскольку он запускается отдельным скриптом). Когда это будет сделано, мы перейдем к полностью автоматическому поиску репозиториев, которые используют наш пакет, и предложим им PR с обновлениями до более новой версии.
Наш мини-проект состоит из таких частей:
- Создайте приложение GitHub на панели инструментов GitHub
- Установите его в репозиторий, где мы будем тестировать наши взаимодействия
- Настройте приложение Node.js для нашего проекта
- Начните с процесса авторизации в виде приложения GitHub и одного экземпляра установки
- Получить данные из удаленного репозитория
- Измените package.json новой версией пакета.
- Создайте новую ветку для наших изменений
- Зафиксировать один файл в удаленной ветке
- Создайте Pull Request из созданной ветки в ветку по умолчанию
Похоже, у нас сегодня есть дела. Тогда приступим!
Создайте приложение GitHub на панели инструментов GitHub
Прежде чем фактически перейти на GitHub, нам понадобится адрес веб-перехватчика приложения и целевой страницы. Вы можете использовать свой собственный облачный сервер (например, AWS, Digital Ocean или Heroku) или использовать Smee.io. Smee.io — это сервис, который получает полезные данные по адресу, доступному в Интернете, а затем отправляет их вашему локально запущенному приложению. Если вы используете Smee.io, пока просто нажмите Начать новый канал и скопируйте ссылку в поле URL-адрес прокси-сервера Webhook. Он нам понадобится позже на этом этапе.
Теперь вам нужно создать приложение GitHub в разделе Настройки разработчиков на странице настроек GitHub. Заполните поле имени тем, которое вам нравится, например, обновление package.json через Node.js в моем случае. А затем вставьте URL-адрес прокси-сервера веб-перехватчика (или фактический URL-адрес вашего сервера) в URL-адрес домашней страницы и URL-адрес веб-перехватчика.
Затем нам нужно настроить разрешения для нашего приложения GitHub. Прежде всего, установите для «Содержимое репозитория» доступ Чтение и запись, а также «Запросы на извлечение». Этого должно быть достаточно для нашей первой итерации, и всегда можно обновить эти настройки позже. Наконец, выберите «Только в этой учетной записи» для «Где можно установить это приложение GitHub?» вопрос и нажмите кнопку «Создать».
На странице вашего приложения нажмите «сгенерировать закрытый ключ» и сохраните его в каталоге своего проекта. Мы воспользуемся им позже. Также сохраните идентификатор приложения из раздела «О программе».
Вот и все, мы создали приложение GitHub . по крайней мере, теперь оно есть на GitHub
Установите приложение GitHub в репозиторий
Следующее, что нам нужно сделать, это предоставить нашему новому приложению GitHub доступ к одному или нескольким репозиториям, которые мы хотим, чтобы оно могло обновляться. Для этого перейдите на общедоступную страницу своего приложения или нажмите «Установить приложение» в настройках приложения.
Вы увидите список учетных записей и организаций, к которым у вас есть доступ администратора. В моем случае это только моя учетная запись GitHub, поэтому я нажимаю «Установить». Затем мы можем выбрать, хотим ли мы предоставить доступ ко всем или только к нескольким репозиториям. Я буду использовать первый вариант, так как он может быть полезен для нашей автоматизированной фазы.
Когда вы нажмете «Установить» здесь, установка вашего приложения GitHub будет завершена. Теперь у него есть доступ к репозиториям в вашей учетной записи, он может читать и записывать их, а также управлять запросами на перенос. С этого момента мы действительно можем приступить к разработке нашей реализации для функциональности, о которой мы упоминали в начале статьи.
Настройте приложение Node.js для нашего проекта
Вы можете использовать свой любимый шаблонный шаблон, учебник или создать проект с нуля. Мы хотим от нашего приложения Node.js следующего:
- Поддержка синтаксиса ES6
- Имейте файл .env со следующими данными: GITHUB_APP_IDENTIFIER, PRIVATE_KEY и GITHUB_WEBHOOK_SECRET, если вы его использовали.
В своем проекте я только что использовал такую последовательность инициализации:
И создал файлы .babelrc:
После этого мы можем перейти к первому этапу освоения GitHub App — авторизации в качестве нашего приложения.
Реализовать процесс авторизации для приложения GitHub
Приложение GitHub может авторизоваться двумя способами:
- Как приложение. Таким образом можно получить общую информацию о самом приложении.
- Как конкретная установка приложения. Помните, когда вы установили приложение в свой аккаунт? То есть к каждой такой установке можно получить доступ отдельно.
В этом режиме приложение GitHub может фактически использовать все разрешения, которые мы предоставили ему во время настройки.
Нам нужно начать с аутентификации в качестве приложения, так как это требуется для любого дальнейшего взаимодействия с GitHub API. Для аутентификации в качестве приложения нам необходимо сгенерировать JWT, подписанный закрытым ключом приложения, который мы сохранили ранее. После этого мы можем использовать этот JWT для получения токенов доступа для отдельных установок.
Для этой части мы используем пакет octokip / app. Кроме того, мы собираемся использовать octokit / rest, который является официальным клиентом REST API для GitHub API. На их страницах GitHub есть обширная документация по методам octocit / rest и их использованию.
Давайте создадим файл ./src/package-updater/auth.js , который будет обрабатывать этот поток:
И проверьте, правильно ли он работает в одном из репозиториев, в который мы установили наше новое приложение GitHub. Для меня это будет репозиторий самого проекта. Вот наш ./src/main.js :
И мы можем запустить его с npm start . Если вы все сделали правильно, в выводе терминала вы увидите что-то вроде следующего:
v1.f4ada6a4ad7132f12f4a92123fab66ad3a5f0dda
Вот и все, токен доступа к установке, который позволяет работать напрямую с нашим репозиторием. А теперь давайте сделаем с ним что-нибудь полезное.
Чтение данных из удаленного репозитория
Первым шагом к обновлению файла package.json в удаленном репозитории является его чтение. Итак, почему бы нам не начать реализацию с этого момента. Octokit / rest нам в этом поможет.
Прежде всего, нам нужно будет создать REST-клиент с разрешениями уровня установки. Поскольку мы собираемся использовать для всех наших вызовов API, давайте добавим следующую функцию в auth.js и обновим наш экспорт:
Теперь мы можем попробовать прочитать файл из удаленного репозитория. Для этого создадим getRemotePackageJSONObject функцию в ./src/package-updater/index.js :
И вызовем эту функцию из нашего main.js :
Если все в порядке, вы увидите содержимое удаленного файла package.json в своей консоли.
Измените объект package.json
Теперь мы можем начать изменять данные и продолжить работу, чтобы вернуть их в репозиторий. Однако давайте сделаем паузу и на минутку задумаемся об архитектуре нашего приложения.
У нас будет модуль с именем «package-updater» с единственной точкой входа updateRemoteRepository, которая будет принимать три параметра:
- Название репозитория в формате «владелец / репо»
- Имя пакета в package.json, который необходимо обновить. Например, «экспресс»
- Новая версия модифицируемого пакета
Он выполнит всю работу и вернет только результат: True, если обновление прошло успешно, или выдаст ошибку в противном случае.
Для этого давайте немного обновим наш ./src/package-updater/index.js и добавим следующие функции:
А также обновите main.js , чтобы он вызывал нашу новую богоподобную функцию:
Вау, теперь мы можем вернуться к тому, о чем должен быть этот раздел.
Измените объект package.json (теперь по-настоящему)
На самом деле это самая легкая часть нашей задачи. Мы можем просто использовать синтаксис распространения и выполнить всю работу в этих нескольких строках ./src/package-updater/index.js :
Теперь, когда мы обновили наши данные, нам нужно отправить их обратно в репозиторий. И первый шаг к этой цели — это…