// 
//     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.
//

= Видеоролик о настройке репозитория GitHub при помощи IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Видеоролик о настройке репозитория GitHub при помощи IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Видеоролик о настройке репозитория GitHub при помощи IDE NetBeans

|===
|В этой экранной демонстрации показано, как настроить репозиторий Git в IDE NetBeans и поместить его в GitHub, используя поддержку системы управления версиями Git в IDE.

Описываемые процедуры:

* создание образца проекта в среде IDE
* инициализация репозитория Git в созданном проекте
* выгрузка проекта в GitHub

Авторы: Ондрей Врабец (Ondrej Vrabec), Алена Сташкова 
Продолжительность: 5:52

link:http://bits.netbeans.org/media/github_nb.mp4[+Смотреть видео полностью/Загрузить+] (.mp4) (Ctrl-Click для загрузки, 11,3 МБ)

link:/about/contact_form.html?to=3&subject=Feedback:%20Screencast%20-%20Setting%20Up%20a%20GitHub%20Repository%20Using%20NetBeans%20IDE[+Мы ждем ваших отзывов+]
 |  
|===


== Связанные ссылки

* link:http://wiki.netbeans.org/NewAndNoteworthyNB74[+NetBeans 74 New And Noteworthy+]
* link:https://netbeans.org/kb/docs/ide/git.html[+Использование поддержки Git в IDE NetBeans+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG234[+Управление версиями приложений в системах контроля версий+] в документе _Разработка приложений в IDE NetBeans_
