はじめに
多くの開発現場,昨今では大学の研究室などにおいてもgitの利用が拡大しているそうです.
gitを用いることで,多数のソースコードを管理するだけでなく,論文などの添削にも活用できることが知られています.
OSSの世界ではGitHubなどで公開すれば,多くの人に使ってもらえたり,
あるいは,GitLabサーバなどを自前で構築し完全にクローズドな環境でバックアップ・共同作業をすることも可能です.
しかしながら,gitは出来ることが多いことの代償として,覚えることも多いです.
そのため,いざ研究室などに導入しようと思い立っても学習コストの面で進まなかったりします.
公式のドキュメントを参照しようにも全てが詳細に書かれており,
ある程度gitに慣れた人でなければしりすごみしてしまうでしょう.
そこで,今回はClickというPythonのライブラリを用いて簡単にgitを体験できるツールを作成しました.
本稿はそのツール,GCH (Git Commit Handler)1の紹介になります.
ソースコード
ソースは全てGitHubのこのレポジトリで公開しています.
Pull RequestやIssue大歓迎です.
使い方
詳しくはドキュメントをみてください.
また,コマンドのどの段階でもCtrl-Cで抜け出せます.
インストール
$ brew tap scstechr/gch
$ brew install gch
オプション
$ gch --help
Usage: gch [OPTIONS]
Options:
-i, --init Run initializer >Default:False
-v, --verbose Verbose option. >Default:False
-l, --log Git log with option. >Default:False
-r, --remote TEXT Choose which remote repo.to push. >Default:origin
-g, --gitpath PATH Path of dir that contains `.git`. >Default:.
-f, --filepath TEXT Path/Regex of staging file/dir. >Default:.
-b, --branch TEXT Commiting branch. >Default:master
-c, --commit Commit
-p, --push Push.
-s, --save Save settings >Default:False
-d, --diff Open diff tool >Default:False
--version Check version of gch >Default:False
--reset Reset all changes since last commit. >Default:False
--pull Fetch + Merge from <origin> <master>. >Default:False
--help Show this message and exit.
基本的なコマンド
コミットするにはgch -c あるいは gch --commitと実行します.
このとき,全てのファイルがステージングされ (git add .と同様の処理),メッセージを入力するとコミットします.
短縮系
また,gch -c/gch --commitのように引数によっては短縮系が存在します.
そのほかにもログを確認する(git log)にはgch -l, プッシュする(git push)にはgch -pと入力します.
デフォルトの場合,エディタが立ち上がる場合はVimですので,必要に応じてqで抜け出してください.
もしターミナルがおかしくなった場合はshellでresetコマンドを実行してください.
複合コマンド
コマンドは複合して実行することができます.
例えば,コミットしてそのままプッシュしたい場合はgch -cpとすれば良いです.
同じようにコミットする際に前回のコミットとの差分を見たい場合はgch -cdとすることも可能です.
(差分確認後にコミット,プッシュするならgch -cdpとすればよい)
この辺りはClickで実装してる恩恵ですね.
以下に複数のコマンド例を示します.
例1. リモートレポジトリlocalhostのtestブランチにコミットしてプッシュしたい
$ gch -cp -r localhost -b test
例2. 親ディレクトリの.gitディレクトリを用いてA.txtをコミットをしたい
$ gch -c -g .. -f A.txt
設定の保存
例示したようなコマンドを毎回入力するのは面倒なので,設定を保存できるコマンドがあります.
$ gch -c -g .. -f A.txt -s
このように-s/--saveをつけることで,その次からは上記のコマンドを実行するには下記で済みます.
$ gch -c
ISSUE!が発生した時
多くの場合,任意のオプションを選択してもらえればよいです.
ただ,mergeする際にはコンフリクトする可能性があるので気をつけてください2.
これから
少しいじっていただくとわかる通り,gitに精通すればするほど物足りなくなるツールです.
git rebaseであったり,よく使うけど実装されていない機能も多数あります.
なのでぜひ手を加えてください!
(あわよくばプルリクしてくれると嬉しいなって)