【初心者向け】gitの説明
Gitとは
プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムのことです
LinuxというOSを作るためにリーナス・トーバルズによって開発されました
バージョン管理システムには他にも集中型のCVSやSVN/subversionなどがあります
バージョン管理とは
ソースコードは毎日のように変更が加えられますが、なぜ・いつ・誰が・何を変更したのか履歴を記録しておくことが非常に大切です
ファイルの変更はエディタの「保存」「上書き保存」機能で更新されていきますが、なぜ更新したのか、何を更新したのかを後から振り返って確認できる機能はありません
また失敗してしまった時などに元に戻そうとしてもソフトの機能などでひとつ前の世代に戻すくらいなら復旧できるかもしれませんが、1年前の状態に戻すなどの動きは難しいでしょう
さらに自分1人だけが管理するならまだ良いかもしれませんが、複数人での開発をする際や納品などで他人に引き継ぎをする時に未管理状態だと困ることが多いです
例えばAさんがHTMLとCSSファイルを、BさんがJavaScriptファイルを変更していたとします
チームの作業としては最終的にAさんとBさんの作業を合わせたものを納品します
AさんはBさんの持ってるソースコードを送ってもらった後に、Aさんが書いたソースコードを入れ替えなければ作ってるものがどんなものなのかわかりません
加えてこの時に何が変更になったのかをBさんに問い合わせて確認しないと、どんな動きをするものが変更になったのかわかりません
この情報のやり取りをチームが効率的に行えるようにするのがバージョン管理の目的です
学習にGitを使う理由とは
プログラミングやエンジニアリング、システムの学習において振り返りと他人の意見は非常に大事なことです
この2つを目的としてソースコードのレビューという行動を行います(例:Aさんが作ったものをBさんが見てレビューする)
レビューにはAさんが作ったソースコードと、レビューしたBさんのコメントや意見が必要になります
この時にGitを使うことで毎回ソースファイルをアップロードして送り合ったり、どの部分を変更したのかなどの情報を送る必要がなく、Bさんのコメントも履歴として残るため作業だけでなく学習も非常に効率的になります
手動でソースをアップロードしている時に発生する送るものが違ったなどのミスも防ぐことができるようになります
GitHubとは
Gitは導入したり運用したりするのに本来であれば専用のサーバーが必要です
プロジェクトを作る度に専用のサーバーを作ったり、プログラミングの学習を始めようとした人がいきなりサーバーを作らなければいけないというのは非常にハードルが高くなります
そこでGitの便利な機能を使えるサービスとして登場したのがGitHubです
GitHubはソースコードを管理しながら複数人で協働して開発できるソフトウェア開発のプラットフォームです
2008年4月からサービスが開始され、2009年には最も使われてるGitホスティングサービスとなっています
2018年10月からはマイクロソフト社が買収し、新たな開発・運用体制となりました
ソース管理だけでなくタスク管理したり、簡単なHTML/CSS/JavaScriptで作ったページなどを公開できる機能も付いてます
以下はGitHubが持っている機能の一部です
- PublicとPrivateなRepository
- Gist
- GitHub Pages
GitHubの類似サービス
- Bitbucket
- GitLab
実際に学習すること
新しい言葉がいっぱい出てきますが使ってれば勝手に覚えます
覚えないといけないことではあるんですが練習できる環境を手に入れて繰り返して覚えましょう
準備運動
terminal or iTerm2を使ってworkspaceフォルダ=作業用フォルダを作成する
$ git version // git入ってるか確認できるやつ
$ ls // 今PCに何が置いてあるか確認できるやつ
$ mkdir workspace // PCの中に新しくディレクトリ作るやつ
$ pwd // 今自分がどの階層にいるか確認できるやつ
$ cd workspace // 階層を移動しちゃうやつ
$ pwd
Gitの使い方1:初期設定
Remote Repository = origin
- GitHubでRemote Repositoryを作る
- LocalにRepositoryをCloneする
- 自分のPCにネット上のレポジトリをダウンロードする的な意味
- READMEにビビらない
- ソースコードを変更する
- 変更したソースコードをIndexにaddする
- Indexにaddした内容をLocal Repositoryにcommitする
- pushする前に必ずFetchする(情報の更新を行う)
- Local Repositoryでcommitした内容をRemote Repositoryにpushする
- Github上でpushされた内容を確認する
## レポジトリをクローンする
$ git clone [https://github.com/user-name/repository-name.git]
## 現在のgitのステータスを確認する【これめっちゃ使う】
$ git status
## 更新したファイルの中身を確認する【これもよく使う】
$ git diff [file name]
## Indexにaddする
$ git add [file name]
## Local Repositoryにcommitする
$ git commit -m "メッセージは自由に書きましょう"
## Pushする前にfetchする【忘れるので習慣化する】
$ git fetch
## Remote Repositoryの登録
$ git remote add origin 'https://github.com/user-name/repository-name.git/'
## または
$ git remote add origin 'https://user-name@github.com/user-name/repository-name.git/'
## Remote Repositoryにpushする
$ git push
## Passwordを求められたらGitHubアカウントのパスワードを入力する
## git pushでエラーが出たら
fatal: Authentication failed for 'https://github.com/user-name/repository-name.git/'
## 再度Remote repository URLの登録をしてあげる
$ git remote set-url origin https://user-name@github.com/user-name/repository-name.git
Gitの使い方2:ブランチ作業
Git-Flowを覚えて、ブランチを切りMergeする
Git-Flow
- Masterブランチからcheckoutでdevelopブランチを切る
- Developブランチからfeatureブランチを切る
- ブランチを切り替えてみる
- 作業する
- ソースを変更してadd
- commitしてメッセージ残す
- fetchをする
- pushをする
- GitHub上でPull requestを作成する
- レビューのタイミング!
- 内容が良かったらMergeをする
## ブランチを作る
$ git checkout [branch name] // ブランチを作るだけ or 既にある場合はブランチを移動する
$ git checkout -b [branch name] // 作った後にブランチを切り替える
## 存在しているブランチを全て確認する
$ git branch -a
Gitの使い方3:ミスった時に
間違った時の対処
$ git reset // 履歴を残さない
$ git revert // 履歴を残す
revertは初心者のうちは使わなくて良いです(落とし穴→GitHubでマージ済のプルリクをrevertした後に引き続きrevertされたブランチで作業を続行したい時)
- git addの取り消し
## 全部やり直し
$ git reset HEAD
## ファイル指定のやり直し
$ git reset HEAD [file_name]
- git commitの取り消し
## 直前のcommitを打ち消す
$ git reset HEAD
- git pushの取り消し
## commitを無かったことにして
$ git reset HEAD
## 修正したものをリモートへpush
$ git push -f origin HEAD
初心者のうちにやらない方が良いこと
- forceオプションは使うな【お約束】
- 強制的な解決なので元に戻せなくなる可能性がある
- rebaseはわからないうちに使うな
- 慣れてきたらでOK
まとめ
- Gitの操作方法は慣れなので失敗しても挫けないこと
- Gitの操作方法はよく使うものは常に見れるような状態にしておき、わからないことは調べる癖をつける
- SourceTreeなどのGitソフトもあるので各自好きなものを使いましょう
Discussion