// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Использование поддержки Git в IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Использование поддержки Git в IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Использование поддержки Git в IDE NetBeans

IDE NetBeans обеспечивает поддержку для клиента управления версиями Git. Благодаря этой поддержке выполнять задачи контроля версий можно непосредственно из среды IDE. В этом документе демонстрируется выполнение основных задач контроля версий в среде IDE путем рассмотрения стандартной последовательности действий при использовании программного обеспечения контроля версий.

Git является распределенной системой с открытым кодом, предназначенной для быстрого и эффективного контроля версий как в небольших, так и в масштабных проектах. Каждый клон Git представляет собой полнофункциональный репозиторий с полным набором возможностей отслеживания редакций и истории, не зависящими от наличия сетевого доступа или доступа к центральному серверу. Операции ветвления и слияния выполняются быстро и без затруднений. Использование Git для контроля версий файлов в большой степени сходно с использованием таких систем, как Mercurial, Subversion, CVS, Perforce и т.п.



image::images/netbeans-stamp-80-74.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.4 и 8.0"]



== Требования

*Для работы с этим учебным курсом требуются программное обеспечение и ресурсы, перечисленные ниже.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |Версия 7.4 или 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработки приложений на языке Java+] (JDK) |Версия 7 или 8 
|===


== Инициализация репозитория Git

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

1. В окне 'Проекты' выберите проект, для которого не осуществляется управление версиями, и щелкните правой кнопкой мыши имя проекта.
2. В контекстном меню выберите  ``Создание версии``  >  ``Инициализировать репозиторий Git``  (или выберите в главном меню  ``Группа``  >  ``Git``  >  ``Инициализировать`` ).

[.feature]
--
image::images/initialize-git-repo-small.png[role="left", link="images/initialize-git-repo.png"]
--

[start=3]
. В диалоговом окне  ``Инициализировать репозиторий Git ``  укажите путь к репозиторию, в котором будут храниться файлы с контролем версий, или щелкните "Обзор" и выберите требуемый каталог.
. Нажмите кнопку "ОК".

В папке, указанной выше в шаге 3 (папка проекта NetBeans по умолчанию), создается вложенная папка  ``.git`` , являющаяся репозиторием Git, в котором будут храниться все данные моментальных снимков проекта. В указанной папке Git запускает создание версий для всех файлов.
В окне  ``Окно``  >  ``Вывод``  >  ``Выходные данные``  можно просмотреть отчет среды IDE о ходе создания репозитория в локальном рабочем каталоге.

image::images/output-init.png[]

В рабочем дереве все файлы проекта помечены как  ``Добавленные`` . Для просмотра <<viewFileStatus,состояния>> файла наведите курсор на имя файла в окне проектов. В рабочем дереве состояние файла отображается в зеленом цвете справа от косой черты, как показано на следующем рисунке.

image::images/new-locally.png[]

После инициализации репозитория Git выполняется либо <<add,добавление>> файлов, либо непосредственная <<committing,фиксация>> файлов в репозитории Git.


== Клонирование репозитория Git

Для получения копии уже существующего репозитория Git необходимо выполнить операцию его клонирования. Прежде чем запустить мастера клонирования репозитория в среде IDE, следует узнать URL-адрес репозитория Git.

1. В главном меню выберите  ``Группа``  >  ``Git``  >  ``Клонировать`` . Отображается мастер клонирования репозитория.

[.feature]
--
image::images/clone-wizard-small.png[role="left", link="images/clone-wizard.png"]
--

[start=2]
. На странице "Репозиторий" укажите путь к местоположению репозитория Git, имя пользователя и пароль (при необходимости эти данные можно сохранить для использования в дальнейшем).
. (Не обязательно) Щелкните "Настройка прокси" для отображения диалогового окна "Параметры" и установите настройки сервера прокси. По завершении нажмите кнопку "ОК".
. Нажмите кнопку "Далее" для перехода к следующему действию мастера.
. На странице "Удаленные ветви" выберите ветви репозитория, которые требуется загрузить (или из которых надо загрузить изменения) в локальный репозиторий. Нажмите кнопку "Далее".
. На странице "Целевой каталог" укажите следующие данные.
* В поле "Родительский каталог" введите путь к каталогу на жестком диске, выбранному для размещения клонированного репозитория (или нажмите кнопку "Обзор" и выберите требуемый каталог).
В поле "Родительский каталог" выводится путь к каталогу по умолчанию  ``NetBeansProjects`` , в котором хранятся все проекты NetBeans.
* В поле "Имя клона" введите имя локальной папки, в которой требуется создать клон исходного проекта.
По умолчанию в поле "Имя клона" выводится имя текущего репозитория Git.
* В поле "Извлечение ветви" выберите ветвь, которую требуется извлечь в рабочее дерево.
* В поле "Удаленное имя" введите имя исходного клонируемого репозитория.
По умолчанию для клонируемого репозитория используется псевдоним  ``origin`` . Рекомендуется использовать это значение.
* Оставьте установленным флажок "Поиск проектов Netbeans после клонирования", чтобы поиск проектов выполнялся непосредственно после окончания клонирования. (Этот подключаемый модуль выполняет поиск проектов NetBeans в клонированных ресурсах и предлагает открыть обнаруженные проекты.)

[start=7]
. Нажмите кнопку "Завершить".
По завершении клонирования репозитория Git создается папка  ``.git``  с метаданными в папке, выбранной на соответствующем шаге мастера.


=== Клонирование репозитория Git из GitHub с использованием протокола SSH

Для клонирования репозитория Git из GitHub с использованием протокола SSH выполните следующие действия.

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

. В главном меню выберите  ``Группа``  >  ``Git``  >  ``Клонировать`` . Отображается мастер клонирования репозитория.
. На странице "Удаленный репозиторий" мастера клонирования репозиториев укажите путь к требуемому репозиторию в поле "URL-адрес репозитория", например  ``git@github.com:tstupka/koliba.git`` .
. Убедитесь, что в текстовом поле "Имя пользователя" указано  ``git`` .
. Выберите вариант ключа — закрытый или открытый.
. (*Пропустите этот шаг, если для автоматического доступа к серверу Git по протоколу SSH используется агент SSH или Pageant.*) Для получения доступа к серверу Git с помощью закрытого ключа SSH и парольной фразы выполните следующие действия:
... Укажите путь к файлу ключей, например  ``C:\Users\key`` .

NOTE:  Требуется формат закрытого ключа OpenSSH. Ключи, созданные PuTTYgen для Microsoft Windows, должны быть преобразованы в формат OpenSSH перед использованием их в IDE.

.. Введите парольную фразу для файла ключей, например  ``abcd`` .
.. (Не обязательно) Если требуется, установите флажок "Сохранить парольную фразу".
. (*Применимо, если для автоматического доступа к серверу Git по протоколу SSH используется агент SSH или Pageant.*) Чтобы получить аутентифицированный доступ к серверу Git из IDE с помощью правильно настроенного агента SSH или Pageant, оставьте поля "Файл закрытого ключа" и "Парольная фраза" пустыми.
. (Не обязательно) Щелкните "Настройка прокси" для отображения диалогового окна "Параметры" и установите настройки сервера прокси. По завершении нажмите кнопку "ОК".

[.feature]
--
image::images/github-repo-small.png[role="left", link="images/github-repo.png"]
--

[start=8]
. Нажмите кнопку "Далее".
. На странице "Удаленные ветви" выберите ветвь(и) репозитория, которую(ые) требуется загрузить (или из которых надо загрузить изменения) в локальный репозиторий, например  ``master`` .

[.feature]
--
image::images/github-branches-small.png[role="left", link="images/github-branches.png"]
--

[start=10]
. Нажмите кнопку "Далее".
. На странице "Целевой каталог" укажите следующие данные.
* В поле "Родительский каталог" введите путь к каталогу на жестком диске, выбранному для размещения клонированного репозитория (или нажмите кнопку "Обзор" и выберите требуемый каталог).
В поле "Родительский каталог" выводится путь к каталогу по умолчанию  ``NetBeansProjects`` , в котором хранятся все проекты NetBeans.
* В поле "Имя клона" введите имя локальной папки, в которой требуется создать клон исходного проекта.
По умолчанию в поле "Имя клона" выводится имя текущего репозитория Git.
* В поле "Извлечение ветви" выберите ветвь, которую требуется извлечь в рабочее дерево.
* В поле "Удаленное имя" введите имя исходного клонируемого репозитория.
По умолчанию для клонируемого репозитория используется псевдоним  ``origin`` . Рекомендуется использовать это значение.
* Оставьте установленным флажок "Поиск проектов Netbeans после клонирования", чтобы поиск проектов выполнялся непосредственно после окончания клонирования. (Этот подключаемый модуль выполняет поиск проектов NetBeans в клонированных ресурсах и предлагает открыть обнаруженные проекты.)

[.feature]
--
image::images/github-destination-small.png[role="left", link="images/github-destination.png"]
--

[start=12]
. Нажмите кнопку "Завершить".
По завершении клонирования репозитория отображается сообщение "Клонирование завершено".

image::images/clone-completed.png[]

[start=13]
. Выберите требуемый параметр.


== Добавление файлов в репозиторий Git

 Для запуска отслеживания нового файла, а также для помещения на подготовку изменений файла, уже отслеживаемого в репозитории Git, необходимо его добавить в репозиторий.

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

|===
|Описание последовательности действий |Явным образом добавьте новые или измененные файлы в индекс, после чего выполните фиксацию в HEAD только тех файлов, которые помещены в индекс для подготовки. |Пропустите добавление новых или измененных файлов в индекс и выполните фиксацию требуемых файлов непосредственно в HEAD. 

|Шаги по выполнению выбранной последовательности действий  |

1. В окне 'Проекты' щелкните правой кнопкой мыши файл, который необходимо добавить.
2. В контекстном меню выберите  ``Git``  >  ``Добавить`` .  Содержимое файла добавляется в индекс перед выполнением фиксации.
3. В окне 'Проекты' щелкните правой кнопкой мыши файл, который необходимо зафиксировать.
4. В диалоговом окне 'Фикировать' выберите кнопку переключения взаимных изменений между HEAD и индексом ( image:images/changes-head-index.png[] ).  Отобразится список файлов, уже помещенных на подготовку.
5. Выполните фиксацию файлов, как описано ниже в разделе <<committing,Фиксация исходных кодов в репозитории>>.
 |

1. В окне 'Проекты' щелкните правой кнопкой мыши файл, который необходимо зафиксировать.
2. В контекстном меню выберите  ``Git``  >  ``Зафиксировать`` .
3. В диалоговом окне 'Фикировать' выберите кнопку переключения 'Выбрать изменения' для взаимных изменений между индексом и рабочим деревом ( image::images/changes-head-wt.png[] ). 
Отобразится список файлов, еще не помещенных на подготовку.
4. Выполните фиксацию файлов, как описано ниже в разделе <<committing,Фиксация исходных кодов в репозитории>>.
 
|===

NOTE:  <<viewFileStatus,Состояние>> файла в HEAD отображается зеленым цветом слева от косой черты, как показано на следующем рисунке.

image::images/new.png[]

Это действие выполняется рекурсивно при вызове в папках при соблюдении структуры содержимого неструктурированных файлов IDE NetBeans.


== Редактирование файлов

После открытия в среде IDE проекта с контролем версий посредством системы Git, можно приступать к внесению изменений в исходные коды. Аналогично любому проекту, открытому в IDE NetBeans, можно открывать файлы в редакторе исходного кода двойным щелчком на их узлы при их отображении в окнах IDE (пример: проекты (Ctrl-1), файлы (Ctrl-2), Избранное (Ctrl-3)).

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

* <<viewChanges,Просмотр изменений в редакторе исходного кода>>
* <<viewFileStatus,Просмотр информации о состоянии файла>>
* <<revert,Откат изменений>>


=== Просмотр изменений в редакторе исходного кода

Если файл с контролем версий открыт в среде IDE в редакторе исходного кода, то при внесении в файл изменений можно в режиме реального времени сравнивать файл с его основной версией, находящейся в репозитории Git. В процессе работы в среде IDE используется цветовое выделение на полях редактора исходного кода. Различные цвета соответствуют следующей информации.

|===
|*Синий* (       ) |Обозначает строки, измененные по сравнению с более ранней версией. 

|*Зеленый* (       ) |Обозначает строки, добавленные к более ранней версии. 

|*Красный* (       ) |Обозначает строки, удаленные по сравнению с более ранней версией. 
|===

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

image::images/left-margin.png[]

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

image::images/left-widgets.png[]

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

image::images/right-margin.png[]

NOTE:  Щелкнув некоторую точку в пределах поля, можно незамедлительно перевести внутристрочный курсор в соответствующее местоположение в файле. Для просмотра числа затронутых строк наведите мышь на цветные значки в правом поле:

image::images/right-lines-number.png[]


=== Просмотр информации о состоянии файла

При работе в представлениях "Проекты" (Ctrl-1), "Файлы" (Ctrl-2), "Избранное" (Ctrl-3), или "Контроль версий", среда IDE предоставляет несколько функций визуализации, облегчающих просмотр информации о состоянии файлов. В примере, приведенном ниже, обратите внимание, как метка (например, image::images/blue-badge.png[])цвет имени файла и смежная метка состояния соответствуют друг другу для предоставления для пользователей простого и эффективного способа отслеживания данных об изменениях версий файлов:

image::images/file-status.png[]

Все эти компоненты — метки, цветовое выделение, ярлыки состояния файлов и средство Git для просмотра различий (Git Diff Viewer — возможно, наиболее важный компонент) — вместе обеспечивают возможность эффективного просмотра информации о версиях и управления этой информацией в среде IDE.

* <<badges,Метки и условные цвета>>
* <<fileStatus,Ярлыки состояния файлов>>
* <<versioningView,Представление Git "Контроль версий">>


==== Метки и условные цвета

Метки относятся к узлам проектов, папок и пакетов. Они сообщают о состоянии файлов внутри соответствующего узла:

Ниже в таблице приведена цветовая схема, используемая для меток.

|===
|Элемент пользовательского интерфейса |Описание 

|*Синяя метка* (image::images/blue-badge.png[]) |Указывает на присутствие в рабочем дереве файлов, которые были изменены, добавлены или удалены. Касательно пакетов, данная метка относится только к самому пакету, но не к его подпакетам. Что касается проектов и папок, метка указывает на изменения как внутри самого элемента, так и внутри любых его подпапок. 

|*Красная метка* (image::images/red-badge.png[]) |Отмечает проекты, папки или пакеты, содержащие _конфликтующие_ файлы. Касательно пакетов, данная метка относится только к самому пакету, но не к его подпакетам. Для проектов и папок метка обозначает конфликты этого элемента и всех содержащихся подпапок. 
|===

Цветовое обозначение применяется к именам файлов для обозначения их текущего состояния по сравнению с репозиторием:

|===
|Цвет |Пример |Описание 

|*Без специального цвета (черный)* |image::images/black-text.png[] |Указывает на отсутствие изменений в файле. 

|*Синий* |image::images/blue-text.png[] |Обозначает локально измененный файл. 

|*Зеленый* |image::images/green-text.png[] |Обозначает локально добавленный файл. 

|*Красный* |image::images/red-text.png[] |Указывает на то, что файл вовлечен в конфликт слияния. 

|*Серый* |image::images/gray-text.png[] |Указывает на то, что файл игнорируется системой Git и не будет включен в команды контроля версий (например, "Обновить" и "Зафиксировать"). Файлы, стоящие под контролем версий, игнорировать невозможно. 
|===


==== Ярлыки состояния файлов

В среде IDE отображаются следующие два возможных состояния файла.

* Состояние, описывающее различия между состоянием файлов в рабочем дереве и в индексе.
* Состояние, описывающее различия между состоянием файлов в индексе и текущей фиксацией в HEAD.

Ярлыки состояния файлов предоставляют текстовое описание состояния файлов с контролем версий в окнах среды IDE.

|===
|Ярлык состояния |Значение 

|*-* |Неизмененный 

|*Ответ* |Добавлено 

|*U* |Обновленный, но не подвергавшийся слиянию 

|*M* |Изменено 

|*D* |Удален 

|*I* |Игнорируется 

|*R* |Переименовано 
|===

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

image::images/file-labels.png[]

Файлы, вовлеченные в конфликт слияния, характеризуются как не подвергавшиеся слиянию — как правило, это отмечается красным цветом до тех пор, пока конфликт файлов не будет разрешен в результате явного действия пользователя. Ярлык состояния файлов, не подвергавшихся слиянию, зависит от конкретной ситуации (например,  ``A/A``  - не подвергавшиеся слиянию, оба добавлены).

Можно включить или отключить отображение ярлыков состояний файлов, выбрав  ``Вид``  >  ``Показать ярлыки контроля версий``  в главном меню.


==== Представление Git "Контроль версий"

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

Чтобы открыть представление "Контроль версий", выберите папку или файл, находящиеся под управлением системы контроля версий (например, в окне "Проекты", "Файлы" или "Избранное"). Затем выберите  ``Git``  >  ``Показать изменения``  в контекстном меню или  ``Группа``  >  ``Показать изменения``  в главном меню. В нижней панели среды IDE откроется следующее окно:

[.feature]
--
image::images/versioning-view-small.png[role="left", link="images/versioning-view.png"]
--

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

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

|===
|Значок |Имя |Функция 

|image::images/changes-head-wt.png[] |*Взаимные изменения в HEAD и рабочем дереве* |Отображается список файлов, уже помещенных на подготовку, или только измененных/созданных, но еще не помещенных на подготовку. 

|image::images/changes-head-index.png[] |*Взаимные изменения в HEAD и указателе* |Отображается список файлов, помещенных на подготовку. 

|image::images/changes-index-wt.png[] |*Взаимные изменения в индексе и рабочем дереве* |Отображаются файлы, у которых есть различия между состоянием версии, помещенной на подготовку, и состоянием в рабочем дереве. 

|image::images/refresh.png[] |*Обновить состояния* |Обновление состояния всех выбранных файлов и папок. При обновлении файлов, отображенных в представлении "Контроль версий", отражаются все изменения, которые могли быть сделаны извне. 

|image::images/open-diff.png[] |*Открыть окно с различиями* |Открытие представления различий, предоставляющее параллельное сравнение локальных копий и версий в репозитории. 

|image::images/update.png[] |*Откат изменений* |Отображается диалоговое окно <<revertdialog,Откат изменений>> . 

|image::images/commit-button.png[] |*Фиксация изменений* |Отображается диалоговое окно <<commitdialog,Зафиксировать>>. 
|===

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

[.feature]
--
image::images/versioning-right-click-small.png[role="left", link="images/versioning-right-click.png"]
--


=== Сравнение редакций файлов

Сравнение версий файлов – обычная задача при работе над проектами под контролем версий. В среде IDE сравнение редакций выполняется с помощью команды Diff.

NOTE:  В IDE доступно несколько моделей сравнения - "Различия с последней ревизией", "Различия с контролируемыми ревизиями" и "Различия с".

1. Выберите файл или папку с контролем версий (например, в окне  ``Проекты`` ,  ``Файлы``  или  ``Избранное`` ).
2. В главном меню выберите  ``Группа``  >  ``Различия``  >  ``Различия с последней ревизией`` .
В главном окне среды IDE открывается окно графического представления различий для выбранных файлов и редакций. В средстве просмотра различий отображаются две копии на параллельных панелях. Более новая копия отображается справа, поэтому, если выполняется сравнение редакции из репозитория с рабочим деревом, рабочее дерево отображается на правой панели.

[.feature]
--
image::images/diff-viewer-small.png[role="left", link="images/diff-viewer.png"]
--

В программе просмотра различий используется такое же <<color-coding-table,цветовое выделение>>, которое используется для отображения изменений другими компонентами системы контроля версий. На снимке экрана выше зеленый блок обозначает содержание, добавленное к последней редакции. Красный блок указывает, что содержание из ранней редакции было позднее удалено. Синий указывает, что в выделенных строках произошли изменения.

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

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

|===
|Значок |Имя |Функция 

|image::images/changes-head-wt.png[] |*Взаимные изменения в HEAD и рабочем дереве* |Отображается список файлов, уже помещенных на подготовку, или только измененных/созданных, но еще не помещенных на подготовку. 

|image::images/changes-head-index.png[] |*Взаимные изменения в HEAD и указателе* |Отображается список файлов, помещенных на подготовку. 

|image::images/changes-index-wt.png[] |*Взаимные изменения в индексе и рабочем дереве* |Отображаются файлы, у которых есть различия между состоянием версии, помещенной на подготовку, и состоянием в рабочем дереве. 

|image::images/nextdiff.png[] |*Перейти к следующему отличию* |Отображается следующее отличие в файле. 

|image::images/prevdiff.png[] |*Перейти к предыдущему отличию* |Отображается предыдущее отличие в файле. 

|image::images/refresh.png[] |*Обновить состояния* |Обновление состояния всех выбранных файлов и папок. Файлы, отображаемые в окне контроля версий, можно обновить для отражения любых изменений, внесенных извне. 

|image::images/update.png[] |*Откат изменений* |Отображается диалоговое окно <<revertdialog,Откат изменений>> . 

|image::images/commit-button.png[] |*Фиксация изменений* |Отображается диалоговое окно <<commitdialog,Зафиксировать>>. 
|===

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

|===
|Значок |Имя |Функция 

|image::images/insert.png[] |*Заменить* |Выделенный текст вставляется в копию из рабочего дерева. 

|image::images/arrow.png[] |*Переместить все* |Выполняется откат всей локальной копии из рабочего дерева. 

|image::images/remove.png[] |*Удалить * |Выделенный текст удаляется из локальной копии в рабочем дереве. 
|===


=== Откат изменений

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

1. Выберите файл или папку с контролем версий (например, в окне  ``Проекты`` ,  ``Файлы``  или  ``Избранное`` ).
2. В главном меню выберите  ``Группа``  >  ``Откатить изменения`` .
Откроется диалоговое окно 
 ``Откат изменений`` .

image::images/revert.png[]

[start=3]
. Укажите дополнительные параметры (например,  ``Откатить в индексе только изменения, незафиксированные в HEAD`` ) .
. Щелкните "Откатить".

Среда IDE заменяет выбранные файлы теми, которые указаны выше в <<three,шаге 3>>.


== Фиксация исходных файлов в репозитории

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

1. В окне  ``Проекты``  щелкните правой кнопкой мыши файлы, которые необходимо фиксировать.
2. В контекстном меню выберите  ``Git``  >  ``Зафиксировать`` .

Открывается диалоговое окно  ``Фиксация`` .

[.feature]
--
image::images/commit-small.png[role="left", link="images/commit.png"]
--

Диалоговое окно  ``Фиксация``  состоит из следующих компонентов.

* Текстовая область  ``Сообщение о фиксации``  предназначена для описания фиксируемого изменения.
* Раскрывающиеся списки  ``Автор``  и  ``Исполнитель`` , которые в случае необходимости позволяют выяснить, кто внес изменение и кто физически выполнил фиксацию файла.
* Раздел  ``Файлы для фиксации`` , в котором перечислены следующие файлы:
* все измененные файлы;
* все файлы, которые были удалены из рабочего дерева (локально);
* все новые файлы (т.е. файлы, еще не представленные в репозитории Git);
* все файлы, которые были переименованы.

Здесь же имеются две кнопки-переключателя, осуществляющие переключение на режим, в котором следует выполнить фиксацию.

|===
|Элемент пользовательского интерфейса |Имя |Описание 

|image::images/changes-head-index.png[] |*Взаимные изменения в HEAD и указателе* |Отображается список файлов, помещенных на подготовку. 

|image::images/changes-head-wt.png[] |*Взаимные изменения в HEAD и рабочем дереве* |Отображается список файлов, уже помещенных на подготовку, или только измененных/созданных, но еще не помещенных на подготовку. 
|===

NOTE:  Чтобы указать здесь, следует ли исключать отдельные файлы из фиксации, либо снимите флажок в первом столбце с именем  ``Фиксация``  или щелкните правой кнопкой мыши строку файла в столбце  ``Действие фиксации``  и выберите  ``Исключить из фиксации``  во всплывающем меню. Для отображения средства просмотра различий щелкните правой кнопкой мыши строку файла в столбце  ``Действие фиксации``  и выберите  ``Различия``  во всплывающем меню.

* Раздел  ``Обновить проблему``  предназначен для отслеживания проблем, связанных с фиксируемым изменением.

NOTE:  Для запуска в среде IDE режима отслеживания проблем требуется установить подключаемый модуль для JIRA или Subversion.

[start=3]
. Введите сообщение о фиксации в текстовую область  ``Сообщение о фиксации`` . Можно также выполнить любое из следующих действий.
* щелкните значок  ``Последние сообщения``  ( image::images/recent-msgs.png[] ), расположенный в правом верхнем углу, чтобы просмотреть и выбрать необходимое из ранее использованного списка сообщений.
* щелкните значок  ``Загрузить шаблон``  ( image::images/msg-template.png[] ), расположенный в правом верхнем углу, чтобы выбрать шаблон сообщения.
. Назначив действия для конкретных файлов, щелкните  ``Зафиксировать`` . 
Среда IDE выполнит фиксацию и сохранит моментальные снимки в репозитории. В строке состояния IDE, расположенной в правой нижней части интерфейса, отображается выполнение действия фиксации. После успешного завершения фиксации в окнах  ``Проекты`` , ``Файлы`` и  ``Избранное``  исчезают метки контроля версий и цветовое выделение фиксируемых файлов.


== Работа с ветвями

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

При работе с ветвями в среде IDE поддерживаются следующие действия.

* <<branchCreate,Создание>>
* <<branchCheckOut,Извлечение>>
* <<branchMerge,Слияние>>
* <<branchDelete,Удаление>>


=== Создание ветви

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

1. В окне "Проекты" или "Файлы" выберите из репозитория проект или папку, в которой требуется создать ветвь.
2. В главном меню выберите "Группа > Ветвь/Метка > Создать ветвь".

NOTE:  Также можно щелкнуть правой кнопкой мыши на проекте или папке, находящимся под управлением системы контроля версий, и выбрать "Git > Ветвь/Метка > Создать ветвь" в раскрывающемся меню.

Откроется диалоговое окно "Создать ветвь".

[.feature]
--
image::images/create-branch-small.png[role="left", link="images/create-branch.png"]
--

[start=3]
. В поле "Имя ветви" введите имя создаваемой ветви.
. Введите конкретную редакцию выбранного элемента. Для этого введите в поле "Редакция" идентификатор фиксации, существующую ветвь или имя тега, или нажмите кнопку "Выбрать" для просмотра списка редакций, обслуживаемых в репозитории.
. (Не обязательно) В диалоговом окне "Выбор редакции" раскройте "Ветви" и выберите требуемую ветвь; укажите идентификатор фиксации в соседнем списке и нажмите кнопку "Выбрать".
. В полях "Идентификатор фиксации", "Автор", "Сообщение" просмотрите информацию, относящуюся к редакции, для которой создается ветвь, и щелкните "Создать".
Ветвь добавится в папку  ``Ветви/Локальные``  репозитория Git.

[.feature]
--
image::images/branch-added-small.png[role="left", link="images/branch-added.png"]
--


=== Извлечение

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

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

1. В главном меню выберите "Группа > Извлечь > Извлечь ревизию". 
Отобразится диалоговое окно "Извлечение выбранной редакции".

[.feature]
--
image::images/chkout-rev-small.png[role="left", link="images/chkout-rev.png"]
--

[start=2]
. Чтобы указать требуемую редакцию, введите в поле "Редакция" идентификатор фиксации, существующую ветвь или имя тега, или же нажмите кнопку "Выбрать" для просмотра списка редакций, обслуживаемых в репозитории.
. Пропустите этот шаг, если в предыдущем шаге не нажимали кнопку "Выбрать". В диалоговом окне "Выбор редакции" раскройте "Ветви" и выберите требуемую ветвь. Если требуется, в соседнем списке укажите идентификатор фиксации и нажмите кнопку "Выбрать".

NOTE:  Если указанный выпуск относится к допустимой фиксации, которая не отмечены именем ветви, HEAD отключается и пользователь бльше не принадлежит ветви.

[start=4]
. В полях "Идентификатор фиксации", "Автор", "Сообщение" просмотрите информацию, относящуюся к извлекаемой редакции.
. Для создания новой ветви на основе извлеченной редакции выберите параметр "Извлечь в качестве новой ветви" и введите имя поле "Имя ветви".
. Для извлечения редакции нажмите кнопку "Извлечь".
Файлы в рабочем дереве и в индексе обновляются в соответствии с версией из указанной редакции.

NOTE:  Если требуется переключить файлы на уже существующую ветвь (например, на фиксацию, которая не находится наверху одной из ветвей), можно использовать команду "Группа > Git > Ветвь > Переключить на ветвь", указать ветвь в диалоговом окне "Переключение на выбранную ветвь", извлечь ее в качестве новой ветви (не обязательно) и нажать кнопку "Переключить".

В среде IDE поддерживается контекстно-зависимое извлечение файлов, папок и проектов, выбранных в текущий момент в среде IDE. Для извлечения нескольких файлов (не ветви) из индекса выполните следующие действия.

1. В главном меню выберите "Группа > Извлечь > Извлечь файлы". 
Отобразится диалоговое окно "Извлечение выбранных путей".

[.feature]
--
image::images/chkout-path-small.png[role="left", link="images/chkout-path.png"]
--

[start=2]
. Выберите вариант "Обновить индекс записями из выбранной редакции".
При выборе этого варианта индекс обновляется в соответствии с состоянием из выбранной редакции, прежде чем выполнять свое извлечение. Это означает, что выбранные файлы обновляются как в рабочем дереве, так и в индексе.
. Чтобы указать требуемую редакцию, введите в поле "Редакция" идентификатор фиксации, существующую ветвь или имя тега, или же нажмите кнопку "Выбрать" для просмотра списка редакций, обслуживаемых в репозитории.
. Пропустите этот шаг, если в предыдущем шаге не нажимали кнопку "Выбрать". В диалоговом окне "Выбор редакции" раскройте "Ветви" и выберите требуемую ветвь. В соседнем списке укажите номер редакции (если требуется) и нажмите кнопку "Выбрать".
. Для завершения извлечения нажмите кнопку "Извлечь".


=== Слияние

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

1. В главном меню выберите "Группа > Ветвь/Метка > Слить ревизию".
Откроется диалоговое окно "Слияние редакции".

[.feature]
--
image::images/merge-small.png[role="left", link="images/merge.png"]
--

[start=2]
. Чтобы указать требуемую редакцию, введите в поле "Редакция" идентификатор фиксации, существующую ветвь или имя тега, или же нажмите кнопку "Выбрать" для просмотра списка редакций, обслуживаемых в репозитории.
. Пропустите этот шаг, если в предыдущем шаге не нажимали кнопку "Выбрать". В диалоговом окне "Выбор редакции" раскройте "Ветви" и выберите требуемую ветвь. Если требуется, в соседнем списке укажите идентификатор фиксации и нажмите кнопку "Выбрать".
. Нажмите "Слияние".
Выполняется трехстороннее слияние текущей ветви, содержимого рабочего дерева и указанной ветви.

NOTE:  При возникновении конфликта слияния конфликтующий файл помечен с <<badges,красной отметкой>> для указания этого конфликта.

NOTE:  После слияния небходимо <<committing,зафиксировать>> изменений для их добавления к HEAD.


=== Удаление ветви

Для удаления ненужной локальной ветви выполните следующие шаги.

1. В главном меню выберите "Группа > Обзор репозитория".
2. В браузере репозитория Git выберите ветвь для удаления.

NOTE:  Ветвь должна быть неактивной, т.е. в настоящее время не изъята в рабочее дерево.

[start=3]
. Щелкните выбранную ветвь правой кнопкой мыши и во всплывающем меню выберите "Удалить ветвь".
. В диалоговом окне "Удаление ветви" нажмите кнопку "ОК" для подтверждения удаления.
Ветвь удаляется из локального репозитория и из браузера репозитория Git.


== Работа с удаленными репозиториями

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

* <<fetch,Загрузка изменений>>
* <<pull,Загрузка изменений и слияние с активной веткой>>
* <<push,Выгрузка изменений>>


=== Загрузка изменений

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

Для загрузки обновлений выполните следующие действия.

1. Выберите "Группа > Удаленный > Получить изменения".
Отображается мастер загрузки из удаленного репозитория.

[.feature]
--
image::images/fetch-small.png[role="left", link="images/fetch.png"]
--

[start=2]
. На странице мастера "Удаленный репозиторий" выберите репозиторий "Настроенный" (для использования настроенного ранее пути к репозиторию) или вариант "Указать местоположение репозитория Git" (чтобы определить путь к удаленному репозиторию, доступ к которому еще не осуществлялся, его имя, имя для входа, пароль и, если требуется, настройки прокси) и щелкните "Далее".
. На странице мастера "Удаленные ветви" выберите ветви для загрузки из них изменений и щелкните "Готово".
Создается локальная копия удаленной ветви. Выбранная ветвь обновляется в каталоге  ``Ветви``  >  ``Удаленная``  в браузере репозитория Git.
Далее можно выполнить слияние выбранных обновлений в локальную ветвь.


=== Загрузка изменений со слиянием с активной ветвью

В процессе загрузки изменений со слиянием с активной ветвью обновлений из удаленного репозитория Git в нем осуществляется выборка изменений и выполняется их слияние в локальном HEAD локального репозитория.
Для осуществления загрузки изменений со слиянием с активной ветвью выполните следующие действия.

1. Выберите "Группа > Удаленный > Получить и объединить изменения".
Отображается мастер принудительной загрузки из удаленного репозитория.

[.feature]
--
image::images/pull-small.png[role="left", link="images/pull.png"]
--

[start=2]
. На странице мастера "Удаленный репозиторий" выберите репозиторий "Настроенный" (для использования настроенного ранее пути к репозиторию) или вариант "Указать местоположение репозитория Git" (чтобы определить путь к удаленному репозиторию, доступ к которому еще не осуществлялся, его имя и, если требуется, имя для входа и пароль) и щелкните "Далее".
. На странице мастера "Удаленные ветви" выберите ветви для загрузки из них изменений со слиянием с активной ветвью и нажмите кнопку "Готово".
Локальный репозиторий синхронизируется с исходным репозиторием.


=== Выгрузка изменений

Для внесения изменений из локального репозитория Git в общий репозиторий Git выполните следующие действия.

1. Выберите "Группа > Удаленный > Отправить изменения".
Открывается мастер выталкивания в удаленный репозиторий.

[.feature]
--
image::images/push-small.png[role="left", link="images/push.png"]
--

[start=2]
. На странице мастера "Удаленный репозиторий" выберите репозиторий "Настроенный" (для использования настроенного ранее пути к репозиторию) или вариант "Указать местоположение репозитория Git" (чтобы определить путь к удаленному репозиторию, доступ к которому еще не осуществлялся, его имя и, если требуется, имя для входа и пароль) и щелкните "Далее".
. На странице мастера "Выбор локальных ветвей" выберите ветви, в которые следует выгрузить изменения, и щелкните "Далее".
. На странице "Обновление локальных ссылок" выберите ветви, которые требуется обновить в каталоге "Удаленные" локального репозитория, и нажмите кнопку "Готово". 
Указанная ветвь удаленного репозитория обновляется с использованием последнего состояния локальной ветви.


== Заключение

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

link:/about/contact_form.html?to=3&subject=Feedback:%20Using%20Git%20Support%20in%20NetBeans%20IDE[+Отправить отзыв по этому учебному курсу+]



== Дополнительные сведения

Связанные материалы можно найти в следующих документах:

* link:clearcase.html[+Использование поддержки ClearCase в IDE NetBeans+]
* link:subversion.html[+Использование поддержки Subversion в IDE NetBeans+]
* link:mercurial.html[+Использование поддержки Mercurial в IDE NetBeans+]
* link:cvs.html[+Использование поддержки CVS в IDE NetBeans+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG234[+Управление версиями приложений в системах контроля версий+] в документе _Разработка приложений в IDE NetBeans_
