2015 年のエンジニアに Git は欠かせない。
っていうフレーズを読んで以来、そのGitというものが気になっていてな。最近そろそろと手を出してみたらクッソ便利じゃんこれ。バージョン管理システムっていうらしいぜ。つまりは、スクリプトのバックアップがとれるわけだろ? しかもフォルダ単位でカンタンに。そしてそのバックアップの履歴を見ることもサクサクできて、そのバックアップ群をどっかのサーバに上げれば他の人と更新をいっしょにできるんだろ? サーバとかよくわからんから俺には関係ないな、ってちょっと思ったけどそれってDropboxでもできるんだろ? だったら全然できちゃうよ。
しかも、ブランチってシステムを使えば、上書きしあっちゃったりしないようにできるんだろ? すげーな。エンジニアではなくても全然有用じゃん。
というわけである程度使ってみて、よく使ったコマンドとかエイリアスとかノートしとく。



■ 準備

インストールするまで
$ brew doctor
$ brew install git
$ git --version

Gitのテキスト入力を相棒のSublime Text3で行う準備
$ ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl
$ git config --global core.editor "subl -w"

設定をする
$ git config --global user.name Midoriiro (ユーザ名登録)
$ git config --global user.email メアド (メアド登録しないと使えなかったような気がする)
上のを打つとユーザフォルダに .gitconfig ができるので [alias] 項目を作ってエイリアスを書く。俺はこんなのを用意してみた。
graph = log --graph --date=short --pretty='format:%C(yellow)%h %C(green)%cd %C(blue)%an%C(red)%d %C(reset)%s' --all
graph5 = log --graph --date=short --pretty='format:%C(yellow)%h %C(green)%cd %C(blue)%an%C(red)%d %C(reset)%s' --all -n 5
graph10 = log --graph --date=short --pretty='format:%C(yellow)%h %C(green)%cd %C(blue)%an%C(red)%d %C(reset)%s' --all -n 10
stt = status -uno
diffno = diff --name-only
diffwd = diff --word-diff
co = checkout
br = branch
inicom = commit --allow-empty -m 'Initial Commit.'
adda = add --all



■ 実用(上のエイリアスを適用しているものとする)

基本
$ git init (開始)
$ git inicom (空っぽで保存)
$ git adda (全部ファイルをステージング)
$ git commit -m "保存コメント" (保存)
$ git commit --amend (ひとつ前のコミットを修正)
$ git stt (状態確認)
$ git graph (コミット履歴を見る)
$ git diffno リビジョン番号 リビジョン番号 (リビジョン間でどのファイルが変更されてたっけなって確認)

Gitに含まないファイルの登録
.gitignoreを作成する。「python gitignore」でググったらよいのが出てきたので使わせてもらった。
$ git rm -r --cached (.gitignoreが反映されないとき)

ブランチを作って作業
$ git br ブランチ名 (新しいブランチ作る)
$ git co ブランチ名 (作ったブランチに移動)
$ git merge --no-ff 取り込むブランチ名 (ブランチを今のブランチに吸収)
$ git br -D ブランチ名 (いらんブランチを削除)

masterブランチの内容を他ブランチに反映させたいとき
pullとかでmasterを最新状態にする。
他ブランチに移動する。
$ git rebase master
コンフリクトが起きたらそれを解消する。
$ git add コンフリクトしたファイルのパス
$ git rebase --continue

やっべ間違えたってとき
$ git reflog (戻る履歴のリビジョン番号を確認する)
$ git reset --hard リビジョン番号 (指定したところまでフォルダをリセットする)
$ git co リビジョン番号 -- ファイルパス (ファイル単位でリセットする)

リモートリポジトリを使う(俺はDropboxでやってみた)
まずcdコマンドとかで対象フォルダまで行く。
$ git init --bare --shared=true (フォルダをリモートリポジトリに)
ローカルリポジトリへ戻る。
$ git remote add リモートリポジトリ名 リモートフォルダまでのパス (リモートリポジトリを登録)
$ git remote rm リモートリポジトリ名 (いらんくなったら消す)
$ git push リモートリポジトリ名 ブランチ名 (ローカルの保存履歴をリモートに上げる)

他のPCでリモートの保存履歴を引っ張ってくる
$ git init
$ git clone リモートフォルダまでのパス (最初の一回はこう。DLみたいなもんか)
$ git pull リモートリポジトリ名 ブランチ名 (二回目以降の履歴更新)



とりあえずこのあたりを使って、Mac-Windows間のスクリプト移動、更新をやってみてる。外部のPCにデータを置くとなるとサーバが必要になってくる、みたいな思い込みがあったので、Dropboxで大丈夫ってのは目ウロコだったぜ。