Gitとは何なのか?
Gitとは何なのか?
この記事では、GITの特徴やメリットについて解説します。
Gitとは?
形状管理ツール(Configuration Management Tool)の一つです。
- 形状管理ツールはバージョン管理システムとも呼ばれます。
- Gitはソフトウェアを開発する企業の核心資産であるソースコードを効果的に管理できるようにしてくれる無料、公開ソフトウェア
- プロジェクトを進めながらソースコードをUSBやメールでやり取りすることは、途方もない浪費であると同時にセキュリティリスクがあります。そのため、プロジェクトを進める上で形状管理ツールを使用します。
- 形状管理ツールを使用すると、変更を簡単に戻すことができます。 ソースコードを過去の特定の時点に戻したり、特定の時点での変更を取り消したり、2 つのバージョンのソースコードを比較したりすることができます。
SVNとGitの違い
GitがSVNと異なる点は分散型管理システムであることです。
SVN:中央サーバーにソースコードとヒストリーを保存します。
Git:ソースコードを複数の開発PCとストレージに分散して保存します
そのため、中央サーバーに障害が発生してもローカルストレージにコミットすることができ、ローカルストレージを利用して中央ストレージの復元も可能です。
Gitはローカルで管理するため、GitがSVNに比べてはるかに速いです(SVNは変更ログ一つ見るのもインターネット経由でなければなりません。)
Gitのメリット
- ソースコードをやり取りする必要なく、同じファイルを複数の人が同時に作業する並列開発が可能です。
- ブランチを通じて開発した後、本プログラムに合わせる方式(Merge)で開発を進めることができます。
- 分散バージョン管理であるため、インターネットが接続されていないところでも開発を進めることができ、中央ストレージに問題が発生しても元の状態に戻すことができます。
- チームプロジェクトではなく、個人プロジェクトでもGITを通じてバージョン管理をすれば体系的な開発が可能になり、プログラムやパッチを配布する過程も簡単になります。 (pullによるアップデート、patchファイル配布)
Gitの特徴
Distributed development
- 開発履歴全体を各開発者のローカルにコピーし、変更された履歴をもう一つのストレージにコピーします。
- これらの変更により、追加の開発ポイントが取得され、ローカル開発ポイントと同様にマージできます。リポジトリは、GitprotocolおよびHTTPで簡単かつ効率的(特別なウェブサーバ構成なし)にアクセスできます。
Strong support for non-linear
development
迅速かつ便利なbranchおよびmergeサポート、非線形(複数の分岐)開発履歴を視覚化·探索できる強力なツールを提供します。
Efficient handling of large projects
- Gitは非常に速く、大型プロジェクトや履歴の多い作業に非常に合理的です。
- Gitは他のほとんどのバージョン管理システムよりも早く要求します。 そして、一部の作業ではより速く進行します。
- 最近のオープンソースバージョン管理システムより長期間の修正内訳を非常に効率的な圧縮方法を使用します。
Cryptographic authentication of history
Gitの履歴は、成功した開発履歴のcommitによって改訂名として保存されます。 一度それが配布されると、それを知らずに以前のバージョンに変更することはできません。 また、それらを暗号化することもできます。
Toolkit design
UNIXに従い、GITはCで作成された多くの小規模ツールコレクションです、そして多くのスクリプトが機能補強を提供します。 Gitは、新しい奇抜な作業のための手軽な使用と簡単なスクリプティングのためのツールを提供します。
Git? Github?
- Git : 形状管理ツール(バージョン管理システム)です
- Github : 形状管理ツール(バージョン管理)Webホスティングサービスです
Gitウェブホスティングシステム
- プロジェクトのコードを保存するサーバーが必要です。
- バージョン管理システムをサポートするウェブホスティングサービスの機能により、 push, pull requestに反応して自動的に処理(配布など)を実行させることができます。
- ex) GitHub, GitLab, BitBucket
Git GUI
gitコマンドをに覚えなく、GUIを使用することもできます。
- ex) GitHub Desktop, SourceTree, GitKraken
関連用語
Repository
ストレージを意味し、ストレージはヒストリー、タグ、ソースの枝切りまたはbranchに従ってバージョンを保存します。 リポジトリを通じて、作業者が変更したすべてのヒストリーを確認できます。
Working Tree
ストレージをある時点を眺める作業者の現在の時点です。
Staging Area
リポジトリにコミットする前にコミットを準備する場所です。
Commit
現在変更されている作業状態を点検が完了したら、確定してストレージに保存する作業です。
Head
現在作業中のBranchを指します。
Branch
枝または分岐点を意味し、作業をする時に現在の状態をコピーしてBranchで作業した後、完全だと思った時にMergeをして作業します。
Merge
他のBranchの内容を現在のBranchに持ってきて合わせる作業を意味します。
Gitを使用するための基礎用語
git init
バージョン管理したいフォルダから初期化する準備をします
git branch
- 独立な作業スペースを作ります。
- 新しく作ったbranch lab1はmasterと全く同じ状態を持つスペースです。
- ブランチで修正した後コミットするとlab1にのみ記録され、masterブランチにはいかなる影響も与えません。
- 必要な量のbranchを作ることができます。
- 実験中に他のブランチに戻る必要がある場合:checkoutmasterにheadを移さなければなりません。
(cf > 作業中の位置を指す仮想のカーソルが存在しますが、これをgit ではHEAD といいます。) - 実験成功:lab1ブランチの内容をマスターブランチとマージします。
- 実験失敗:lab1ブランチを削除します。
checkout
独立な作業スペースであるブランチを自由に移動できます。
git commit
有意義な修正作業が終わったときに終了を知らせる作業です
pull
リモートストレージの変更された内容をローカル(マイコンピュータ)ストレージに適用する作業をpullといいます。
master
git initをした時、defaultで作られる枝が「master」です。
Discussion