白黒羊

Unityとはほとんど関係ないけどちょっと便利なGit aliasたち

Unityアドベントカレンダーの記事には入れづらかったけれど今後の人生のために残しておきたいGit aliasたちをまとめておきます。

aliasともUnityとも関係ないけど便利な設定

いきなりですが、もはやaliasではないものたちです。globalのconfigを設定します。

git config --global push.default current
git config --global color.ui true
git config --global fetch.prune true

git push –set-upstream origin masterって毎回聞かれるのをやめる – Qiita

Gitのリモートブランチを削除するまとめ – Qiita

masterにマージされているローカルブランチを全部消してリモートから fetch/merge

現在いるブランチと test ブランチだけは消したくないのでパイプでごにょごにょ挟んでいます。

Mac

[alias]
    sync = "!f() {  current=`git symbolic-ref --short HEAD`;\
                    git fetch origin &&\
                    git branch --merged origin/master | grep -vE '^test$' | grep -vE $current | xargs -I BRANCH git branch -D BRANCH &&\
                    git merge origin/master -m \":twisted_rightwards_arrows: sync with origin/master\"; }; f"

マージコミットが生じる場合には最終行が機能します。コミットメッセージに emoji を使っています。

命名規則を守って新しいブランチを作成する

プロジェクトの管理はJIRAを使って行っているのですが、タスクとブランチの対応がわかりやすくなるように、ブランチの名前をタスクと同期しています。このプロジェクトのキーは RAINBOWSEA なので、タスク番号と合わせて、 RAINBOWSEA-XX となります。

% git br
  RAINBOWSEA-219
* RAINBOWSEA-228
  RAINBOWSEA-244
  test

前回の記事にも書いた通り、Unity Cloud Build でテスト用の自動ビルドブランチを指定しているので、 ひとつだけ命名規則に従わない test ブランチがあります。 master ブランチはリモートにだけあります。直接はいじらず、リモートでPRを出してmergeします。

新しいブランチを作るとき、 git checkout -b RAINBOWSEA-100 としても良いのですが、毎回入力するのが億劫なので以下のようなaliasを用意しています。新しく作るときも、既存のものに移動するときも git ch 100 と入力するだけです。数字もしくは test ではない値を入力すると移動させてくれません。もちろん git checkout -b foo などとすると新しいブランチを作ることはできるので一時的に退避用のブランチを作るときなどはそのようにします。

[alias]
    ch = "!f() {    if [ $# != 1 ]; then echo '[error] specify the branch name you want to checkout:' $*; exit 1; fi;\
                    arg=$1;\
                    expr $arg + 1 >&/dev/null;\
                    if [ $? -lt 2 ]; then bn=\"RAINBOWSEA-${arg}\";\
                    elif [ $arg = 't' -o $arg = 'test' ]; then bn='test';\
                    else echo '[error] you can use digits or t[est] as a branch name:' $1; exit 1; fi;\
                    if git show-ref --quiet refs/heads/$bn; then git checkout $bn;\
                    else git fetch origin; git checkout -b ${bn} origin/master; fi; }; f"

また何か思いついたら追加します。