#参考になったサイト
サルでもわかるGit入門
GitHub社員による講演
ProGit
他SoftwereDesignのGit入門とか
サルでもわかるGitはドリルのような感覚で実際に自分の手にコマンドをなじませる感覚で練習できた。
「なぜGitを使用するのか」の「なぜ」の部分を理解するためにGitHub社員の講演を聞いたりProGitで補完するといい感じに学習できる。
#Gitとは
分散型VCS(Version Control System)である。
昔はTimeMachineの様が集中VCSで開発が行われていたが
- 分散型なのでサーバーがダウンしても開発がストップしない
- 開発を"スナップショット"のように保存していく
主に上記の2点から開発の主流がGitに移行した。
#基本の5コマンド
git init <repository or branch name>
GitによってVersion管理する場所を作成する。
自動でディレクトリーを作成してくれるので/workspaceから行うと良い。
git status
現在のディレクトリー内の状態を教えてくれる。
これをすればgit pushまで何をしなければならないかも教えてくれるので最初はgit statusを連打すればだいたい分かる。
git add <file name>
"ワークツリー"から"インデックス"まで作業したファイルのステージを上げる。
このgit addがGitを理解するための要であることを全てのGit入門サイトで繰り返し見たのでここが馴染むまでgit addを繰り返したい。
参考URL
git commit -m "<message>"
インデックスに登録したものをレポジトリーに記録する。commitするためには必ずcommentを付与しなければならず開発において論理的な意味のあるまとまりとしてアップロードする必要がある。
git push <repository or branch name>
Gitをremote repositoryにアップロードする。これにより始めて他人と開発状態を共有することになる。
#他重要コマンド
git branch
gitのbranchを確認する "git branch -r"でremote repositoryにも存在するbranchを確認できる。
git branch -b <branch name>
git のブランチを新たに作成して新しいブランチに移動する。
git checkout <branch name>
<branch name>で指定したbranchに移動する。
<branch name> + <~任意の数字>で指定すると任意の数字だけcommitを遡って移動することができる。この時改めてcheckoutすれば元の状態に戻すことができる。
git fetch <branch name>
remote repositoryに変更があるか確認してローカルに存在するremote repositoryの情報を更新する
git merge <branch name>
ローカルに存在するremote repositoryの情報からローカル現在にbranchと統合する。
mergeした際に競合(他人と自分が同じ場所を編集した状態)が発生すると
<<<<<<< HEAD
ブランチA
=======
ブランチB
>>>>>>> branchB
といいた状態になる。問題が無いように自分で編集した後にcommitすると2つのbaranchが統合する形で新たにcommit ligが作成される。
git pull <branch name>
上記2つの作業を同時に行う。基本的にfetchでかくにんしてからmergeする癖をつけたほうがいっぽい。
#その他便利コマンド
git merge <branch name> —no-ff
git でmergeする際にmergeの履歴をgitに残すことができるコマンド
チームの方針によって使い分けるかもしれない。
git config --global alias.graph "log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
gitのbranchの状態をいい感じに表示してくれる。コマンドを登録するエイリアスコマンド
一回登録すれば以降は "git graph"で表示してくれるのでかなり便利。
git tag <tag name>
GitHub上からタグ検索することができたのでチームでtagを残すルールを決めれば活用できるかもしれない。
commit履歴にtag情報を残すことができる。
#まとめ
一日で学習した範囲ではそこまで難しい概念は出てこなかったのでもう少し早めにやっておけばよかった。「独習Git」等の更に分厚い本を読めばまた奥が深いと感心できることもあるかもしれないが実際使っていて足りないと思った時にまた勉強したいと思う。