// 
//     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リポジトリを設定し、Gitバージョニング・システムのためのIDEのサポートを使用してGitHubを配置する方法を示します。

内容は次のとおりです。

* IDEでサンプル・プロジェクトを作成する
* 作成したプロジェクトでGitリポジトリを初期化する
* プロジェクトをGitHubにプッシュする

作成者: Ondrej Vrabec、Alyona Stashkova 
時間: 5:52

link:http://bits.netbeans.org/media/github_nb.mp4[+フルサイズを視聴/ダウンロード+] (.mp4)([Ctrl]キーを押しながらクリックするとダウンロード、11,3MB)

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[+バージョン管理によるアプリケーションのバージョニング+]
