--- title: Сведения о GIT intro: 'Узнайте о системе управления версиями, Git и о том, как она работает с {% data variables.product.product_name %}.' versions: fpt: '*' ghes: '*' ghae: '*' ghec: '*' type: overview topics: - Fundamentals - Git miniTocMaxHeadingLevel: 3 ms.openlocfilehash: 595fc79c5a656a3d6da8b5589ed384b545a418ac ms.sourcegitcommit: 80842b4e4c500daa051eff0ccd7cde91c2d4bb36 ms.translationtype: HT ms.contentlocale: ru-RU ms.lasthandoff: 09/12/2022 ms.locfileid: '147888125' --- ## Сведения об управлении версиями и GIT Система управления версиями отслеживает историю изменений в процессе совместной работы над проектами. По мере того как разработчики вносят изменения в проект, в любое время можно восстановить любую более раннюю его версию. Разработчики могут просматривать журнал проекта, чтобы узнавать следующее: - какие изменения были внесены; - кто внес изменения; - какие изменения были внесены; - зачем потребовались изменения. Системы управления версиями предоставляют каждому участнику единое, согласованное представление проекта с возможностью отслеживать уже ведущуюся работу. Возможность просмотра прозрачной истории изменений с указанием их авторов и вклада в разработку проекта помогает участникам команды работать согласованно независимо друг от друга. В распределенной системе управления версиями каждый разработчик имеет полную копию проекта и его журнала. В отличие от популярных централизованных систем управления версиями распределенные системы не требуют постоянного подключения к центральному репозиторию. GIT — это самая популярная распределенная система управления версиями. GIT широко применяется для разработки как программного обеспечения (ПО) с открытым кодом, так и коммерческого ПО, предоставляя важные преимущества отдельным разработчикам, командам и компаниям. - GIT позволяет разработчикам просматривать всю временную шкалу изменений, решений и хода выполнения любого проекта в одном месте. С момента доступа к истории проекта разработчик получает всю необходимую информацию, чтобы разобраться в проекте и начать вносить свой вклад. - Разработчики работают в разных часовых поясах. Благодаря распределенной системе управления версиями, такой как GIT, совместную работу можно вести в любое время, сохраняя целостность исходного кода. С помощью ветвей разработчики могут безопасно предлагать изменения для рабочего кода. - Организации, использующие GIT, могут устранить коммуникационные барьеры между командами, чтобы те могли сосредоточиться на выполнении своих задач с максимальной эффективностью. Кроме того, GIT позволяет согласовать совместную работу экспертов над крупными проектами в масштабе всего предприятия. ## Сведения о репозиториях GIT Репозиторий или проект GIT включает в себя полный набор файлов и папок, связанных с проектом, а также журнал изменений каждого файла. Журнал файла представлен в виде моментальных снимков на определенные моменты времени. Эти снимки называются фиксациями. Фиксации можно упорядочивать по нескольким линиям разработки, называемым ветвями. Так как GIT — распределенная система управления версиями, репозитории являются автономными единицами и любой пользователь, имеющий копию репозитория, может получать доступ ко всей базе кода и ее истории. С помощью командной строки или других удобных интерфейсов возможны также следующие действия с репозиторием GIT: взаимодействие с журналом, клонирование репозитория, создание ветвей, фиксация, слияние, сравнение изменений в разных версиях кода и многое другое. С помощью таких платформ, как {% data variables.product.product_name %}, GIT также предоставляет дополнительные возможности для обеспечения прозрачности проектов и совместной работы. Общедоступные репозитории помогают командам работать вместе над созданием максимально качественного конечного продукта. ## Принципы работы {% data variables.product.product_name %} {% data variables.product.product_name %} служит для размещения репозиториев GIT и предоставляет разработчикам средства для поставки более качественного кода: функции командной строки, проблемы (цепочки обсуждений), запросы на вытягивание, проверка кода и коллекция бесплатных и платных приложений в {% data variables.product.prodname_marketplace %}. Благодаря таким уровням совместной работы, как поток {% data variables.product.product_name %}, сообщество из 15 миллионов разработчиков и экосистема, включающая сотни интеграций, {% data variables.product.product_name %} изменяет подход к созданию программного обеспечения. {% data variables.product.product_name %} позволяет интегрировать совместную работу непосредственно в процесс разработки. Работа организована по репозиториям, в которых разработчики могут устанавливать требования или давать указания участникам команды. Затем, используя поток {% data variables.product.product_name %}, разработчики просто создают ветвь для работы с обновлениями, фиксируют изменения, чтобы сохранять их, открывают запросы на вытягивание, чтобы предлагать и обсуждать изменения, и выполняют слияние запросов на вытягивание после их согласования. Дополнительные сведения см. в разделе [Процесс работы с GitHub](/get-started/quickstart/github-flow). ## {% data variables.product.product_name %} и командная строка ### Основные команды Git Работая с GIT, разработчики используют определенные команды для копирования, создания, изменения и объединения кода. Эти команды можно выполнять непосредственно из командной строки или с помощью приложения, например {% data variables.product.prodname_desktop %}. Ниже приведены некоторые распространенные команды для работы с GIT. - `git init` — инициализирует новый репозиторий GIT и начинает отслеживание существующего каталога. В существующий каталог добавляется скрытая вложенная папка, в которой размещается внутренняя структура данных, необходимая для управления версиями. - `git clone` — создает локальную копию проекта, который уже существует удаленно. Клон включает в себя все файлы проекта, журнал и ветви. - `git add` — подготавливает изменение. GIT отслеживает изменения в базе кода разработчика, но для включения изменений в журнал проекта необходимо подготавливать их и создавать моментальные снимки. Эта команда выполняет первую часть этого двухэтапного процесса, то есть подготовку. Все подготовленные изменения станут частью следующего моментального снимка и журнала проекта. Раздельные подготовка и фиксация дают разработчикам полный контроль над историей проекта без необходимости изменять подход к написанию кода и работе в целом. - `git commit` — сохраняет моментальный снимок в журнале проекта и завершает процесс отслеживания изменений. Иначе говоря, фиксация похожа на создание фотографии. Все, что было подготовлено с помощью команды `git add`, станет частью моментального снимка при использовании `git commit`. - `git status` — выводит состояние изменений: не отслеживаются, изменены или подготовлены. - `git branch` — показывает ветви, с которыми ведется локальная работа. - `git merge` — выполняет слияние линий разработки. Эта команда обычно применяется для объединения изменений, внесенных в двух разных ветвях. Например, разработчик выполняет слияние, когда необходимо объединить изменения из ветви функции с главной ветвью для развертывания. - `git pull` — применяет к локальной линии разработки обновления из удаленного аналога. Разработчики используют эту команду, если коллега выполнил фиксации в ветви удаленного репозитория и эти изменения нужно отразить в локальной среде. - `git push` — обновляет удаленный репозиторий с учетом фиксаций, выполненных в ветви локально. Дополнительные сведения см. в [полном справочном руководстве по командам GIT](https://git-scm.com/docs). ### Пример. Участие в существующем репозитории ```bash # download a repository on {% data variables.product.product_name %} to our machine # Replace `owner/repo` with the owner and name of the repository to clone git clone https://github.com/owner/repo.git # change into the `repo` directory cd repo # create a new branch to store any new changes git branch my-branch # switch to that branch (line of development) git checkout my-branch # make changes, for example, edit `file1.md` and `file2.md` using the text editor # stage the changed files git add file1.md file2.md # take a snapshot of the staging area (anything that's been added) git commit -m "my snapshot" # push changes to github git push --set-upstream origin my-branch ``` ### Пример. Создание нового репозитория и его публикация в {% data variables.product.product_name %} Сначала необходимо создать репозиторий на {% data variables.product.product_name %}. Дополнительные сведения см. в разделе [Hello World](/get-started/quickstart/hello-world). **Не** инициализируйте репозиторий с помощью файла сведений, GITIGNORE или файла лицензии. Этот пустой репозиторий ожидает добавления кода. ```bash # create a new directory, and initialize it with git-specific functions git init my-repo # change into the `my-repo` directory cd my-repo # create the first file in the project touch README.md # git isn't aware of the file, stage it git add README.md # take a snapshot of the staging area git commit -m "add README to initial commit" # provide the path for the repository you created on github git remote add origin https://github.com/YOUR-USERNAME/YOUR-REPOSITORY-NAME.git # push changes to github git push --set-upstream origin main ``` ### Пример. Участие в существующей ветви на {% data variables.product.product_name %} В этом примере предполагается, что у вас на компьютере уже есть проект с именем `repo` и что новая ветвь была отправлена в {% data variables.product.product_name %} с момента последнего внесения изменений локально. ```bash # change into the `repo` directory cd repo # update all remote tracking branches, and the currently checked out branch git pull # change into the existing branch called `feature-a` git checkout feature-a # make changes, for example, edit `file1.md` using the text editor # stage the changed file git add file1.md # take a snapshot of the staging area git commit -m "edit file1" # push changes to github git push ``` ## Модели совместной разработки Существует два основных способа совместной работы на {% data variables.product.product_name %}: 1. общий репозиторий; 2. создание вилок и вытягивание. В случае с общим репозиторием отдельные пользователи и команды явно назначаются участниками с доступом на чтение, запись или администрирование. Эта простая структура разрешений в сочетании с такими возможностями, как защищенные ветви, помогает командам быстро приступить к работе после внедрения {% data variables.product.product_name %}. Для проектов с открытым кодом или проектов, в которых могут участвовать любые пользователи, управление отдельными разрешениями может быть непростой задачей. В этом случае удобнее модель на основе вилок и вытягивания, которая позволяет всем, кто может просматривать проект, принимать участие в нем. Вилка — это копия проекта в личной учетной записи разработчика. Каждый разработчик имеет полный контроль над вилкой и может свободно реализовывать исправление или новую функцию. Результаты работы в вилках либо хранятся отдельно, либо переносятся обратно в исходный проект с помощью запроса на вытягивание. Лица, ответственные за проект, могут проверять предлагаемые изменения перед их слиянием. Дополнительные сведения см. в разделе [Участие в проектах](/get-started/quickstart/contributing-to-projects). ## Дополнительные материалы Команда {% data variables.product.product_name %} создала библиотеку учебных видео и руководств, которые помогут пользователям развить свои навыки и создавать более качественное программное обеспечение. - [Проекты для изучения начинающими](https://github.com/showcases/great-for-new-contributors) - [Видеоруководства по {% data variables.product.product_name %}](https://youtube.com/githubguides) В приведенных ниже видеороликах подробно описываются методы работы с GIT и способы максимально эффективного использования некоторых команд GIT. - [Локальная работа](https://www.youtube.com/watch?v=rBbbOouhI-s&index=2&list=PLg7s6cbtAD17Gw5u8644bgKhgRLiJXdX4) - [`git status`](https://www.youtube.com/watch?v=SxmveNrZb5k&list=PLg7s6cbtAD17Gw5u8644bgKhgRLiJXdX4&index=3) - [Двухэтапная фиксация](https://www.youtube.com/watch?v=Vb0Ghkkc2hk&index=4&list=PLg7s6cbtAD17Gw5u8644bgKhgRLiJXdX4) - [`git pull` и `git push`](https://www.youtube.com/watch?v=-uQHV9GOA0w&index=5&list=PLg7s6cbtAD17Gw5u8644bgKhgRLiJXdX4)