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

= 使用 NetBeans IDE 设置 GitHub 资料库的视频
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 NetBeans IDE 设置 GitHub 资料库的视频 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 NetBeans IDE 设置 GitHub 资料库的视频

|===
|此截屏视频演示了如何在 NetBeans IDE 中设置 Git 资源库，并使用 IDE 对 Git 版本控制系统的支持将其放入 GitHub 中。

您即将了解如何：

* 在 IDE 中创建样例项目
* 在创建的项目中初始化 Git 资源库
* 将项目推入到 GitHub

作者：Ondrej Vrabec、Alyona Stashkova 
播放时长：5:52

link:http://bits.netbeans.org/media/github_nb.mp4[+观看全图/下载+] (.mp4)（按住 Ctrl 键单击即可下载，大小为 11,3 MB）

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 新增和值得注意的内容+]
* link:https://netbeans.org/kb/docs/ide/git.html[+在 NetBeans IDE 中使用 Git 支持+]
* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG234[+使用版本控制对应用程序进行版本控制+]
