はじめに
今回のチームでの開発においてバージョン管理システムはGit(GitHub)を利用したので、
導入手順から利用方法まで説明したいと思います。
仕事ではSVNを利用しているので、SVNとの違いも語りたいと思います!!
アジェンダ
- Git & GitHubとは?
- Gitに関する用語
- SVNとの違い
- 導入メリット
- GitHubアカウント作成方法
- ブランチ作成 〜 コミット・プッシュ方法
- リモートリポジトリからローカルへの取り込み方法
- リンク集
- 最後に
1. Git & GitHubとは?
■ Gitとは
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム。
元々は、Linuxカーネルのソースコード管理に用いるために開発された。そのため大規模なリポジトリを扱いやすい。
■ GitHubとは
Gitを利用した、開発者を支援するWebサービス。
クラウド上でGitを用いたバージョン管理をすることができ、さらにGitにはない開発者に便利な機能を追加(*プルリクエストなど。)
*プルリクエスト(Pull Request)とは
ソースコードの変更点について他のメンバーにレビュー依頼ができる機能。レビューがOKとなったソースコードだけを反映させることができるので、品質の向上に役立つ。
2. Gitに関する用語
基本的な用語のみピックアップ!!
ワーキングツリー:現在作業している場所
インデックス:コミットするためのファイルを登録する場所
ローカルリポジトリ:リモートリポジトリに送るためのコミットを記録する場所
リモートリポジトリ:複数人で共有するためのリポジトリ
HEAD:今いるブランチの最新のコミットID
Origin:リモートリポジトリのアクセス先に対してGitがデフォルトでつける名前
3. SVNとの違い
Gitは分散型バージョン管理システム。
それに対して、SVNは集中型バージョン管理システム。
- これによって何が違うかと言うと、Gitでは開発者がローカル上でソースのバージョンを管理することができる。
Gitはリモートリポジトリという本体はあるが、コミットは各開発者のローカルリポジトリにもできる。そのため分散型バージョン管理システムと言われる。
その一方、SVNはローカルリポジトリと言うものはなく、各開発者は直接リモートリポジトリにコミットするしかない。そのため、集中型バージョン管理システムと言われる。
・Git&SVNのコミットの流れ
Gitは**コミット(ローカルリポジトリへ)してから、プッシュ(リモートリポジトリへ)するのに対して、SVNは直接コミット(リモートリポジトリへ)**する。
・コマンド比較
コマンド内容 | SVN | Git |
---|---|---|
リポジトリの複製 | checkout | clone |
コミット | commit | commit |
コミット内容の確認 | cat | show |
現在の状態の確認 | statu | status |
変更した差分の確認 | diff | diff |
ログの確認 | log | log |
ファイルの追加 | add | add |
ファイルの移動 | mv | mv |
ファイルの削除 | rm | rm |
ファイルの変更の取消 | revert | checkout / reset |
ブランチの作成 | copy | branch |
ブランチの切り替え | switch | checkout |
ブランチのマージ | merge | merge |
タグの作成 | copy | tag |
ローカルの更新 | update | pull / fetch |
リモートへの反映 | commit | push |
4. 導入メリット
1.ローカルコミットができる。
→作業単位毎に気軽にコミットでき、編集・バグ検知しやすい。
2.ブランチが簡単に切れる
→気軽にブランチを切ることができるため、他の開発者に影響を与えず開発しやすい。
SVNのブランチとマージにはかなりの「制約」や「コスト」がかかる。
3.機能が充実し、操作体系も洗練されている
→GitHubなどのホスティングサービスも充実。コマンドも充実。
4.世界の標準はGit
→近年ではSVNを抑えて圧倒的(!?)シェア
5. GitHubアカウント作成方法
以下のサイトにアクセスし、ユーザー名、メールアドレス、パスワードを作成する。
・公式サイト
https://github.com/
6. ブランチ作成 〜 コミット・プッシュ方法
■ githubにコミット・プッシュする際の大まかな流れ(初回)
①ローカルリポジトリを作成し、作業内容をコミットする
②ローカルリポジトリにコミットした内容をリモートリポジトリにプッシュする
・①の例:”upallnight”というローカルリポジトリを作成し、moc.htmlをコミットする
1.ローカルリポジトリの作成方法
$ mkdir upallnight (upallnightディレクトリを作成)
$ cd upallnight (upallnightディレクトリに移動)
$ git init (upallnightディレクトリをリポジトリに設定)
2.ローカルリポジトリにコミットを行う方法
$ git add moc.html (gitにコミットする前にインデックスに追加)
$ git commit -m “add new file” (gitにコミットする。コメントとして“add new file”を設定)
$ git status (gitのインデックスへの追加状態、コミットされていないものがないのかを確認できる)
・②の例:”develop/XXX”ブランチを作成し、ローカルリポジトリにコミットした内容を
AAA/BBBリモートリポジトリにプッシュする(AAA/BBBは仮のリポジトリ名)
1.ブランチの作成方法
$ git branch develop/XXX (develop/XXXブランチを作成)
$ git checkout develop/XXX (develop/XXXブランチに移動)
$ git branch (現在のブランチ一覧を確認できる。*がついているブランチが選択されているブランチ)
2.リモートリポジトリへのプッシュを行う方法
$ git remote add origin https://github.com/AAA/BBB.git
$ git git push origin develop/XXX
7. リモートリポジトリ最新取り込み
・初回_ブランチをローカルに丸々取り込み
git clone -b ブランチ名 https://github.com/AAA/BBB.git(リモートリポジトリ)
→ターミナル上から叩くと、カレントディレクトリにブランチをコピー
・2回目以降_差分取り込み
git fetch origin manInTheMirror
git merge FETCH_HEAD
もしくは
git pull origin manInTheMirror ←推奨しない!!!
上記、二つは同じ意味。pullコマンドはfetchとmergeのショートカットコマンドの為。
(内部で「fetchコマンド」と「mergeコマンド」を順次行ってくれている)
「fetchコマンド」で更新を取得し、内容を確認したのちに、マージ作業に取りかかるべきです。
ちなみにFETCH_HEAD とは、git fetch 実行時に保存される参照情報。
8. リンク
以下は参考にさせて頂いた記事・サイト等です。
この場をお借りしてお礼申し上げます。
・用語集
https://qiita.com/nh321/items/6517b0964c6ed1685ecf
・コマンド集
https://www.sejuku.net/blog/5816
https://qiita.com/kohga/items/dccf135b0af395f69144
・公式_GUIツール(SourceTree)
https://ja.atlassian.com/software/sourcetree
9. 最後に
業務でSVNを使っていた分、最初はコマンドの違いなどに戸惑いました。。。汗
ただ慣れてくると気軽にローカルリポジトリにコミットできバージョン管理ができるので、過去にどういう修正をしたかなど追いやすいです!
世間ではSVNよりGitの風潮なので機会があれば、まだ使ったことがない人はぜひこの機会に^^
ちなみにGitのGUIツールのSourceTreeはかなり使いやすのでオススメです!