Help us understand the problem. What is going on with this article?

ghqとgit aliasのある生活

More than 3 years have passed since last update.

ghqを使うとリポジトリ管理社会がほんの少し滑らかになりますが、どうもgit関連のコマンドが二つに分裂してしまった気がして精神が安定しなかったので、gitのエイリアスでどうにかしてみました1

あなた2は以下のように設定しました。これで何ができるのかを見ていきます。

.gitconfig
[alias]
    get = !ghq get -p
    cd = "!ghq look `ghq list | fzy $(echo $1 | awk '{if($1!=\"\") print \"-q\" $1}')` ; :"
    list = !ghq list
    root = "!exec $SHELL ; :"

git get: クローン

.gitconfig
[alias]
    get = !ghq get -p

普通です。-pをつけるとSSH接続してくれます。

git cd: 指定したリポジトリに移動

.gitconfig
[alias]
    "!ghq look `ghq list | fzy $(echo $1 | awk '{if($1!=\"\") print \"-q\" $1}')` ; :"

どこからでも移動できます。

ghqだけだとリポジトリ名をフルで指定する必要がありますが、ここではfzyの曖昧検索を利用して、適当な入力でも移動できるようにしてみました。大抵の場合、git cdのあとに検索クエリを指定してEnterを二回押せば移動できます。

git list: リポジトリ一覧

.gitconfig
[alias]
    list = !ghq list

普通です。ghqで管理しているリポジトリを一覧表示してくれます。

git root: 作業リポジトリのトップに移動

.gitconfig
[alias]
    root = "!exec $SHELL ; :"

はい。ghq関係ないですね。ただトップに移動するだけなら.bashrcgit-rootのような孤独なエイリアスを書いたりする必要はありません。シェルはリフレッシュしてしまいますが……。

git unget: リポジトリを削除

おまけです。

.gitconfig
[alias]
    unget = "!REPO=`ghq list | fzy $(echo $1 | awk '{if($1!=\"\") print \"-q\" $1}') | tee /dev/tty` ; if [ -n \"$REPO\" -a -e \"$(ghq root)/$REPO\" ] ; then REPO=\"`ghq root`/$REPO\" ; else exit 1 ; fi ; if [ -n \"$(git -C \"$REPO\" -c status.color=always status --short | tee /dev/tty)\" -o -n \"$(git -C \"$REPO\" log --branches --not --remotes --simplify-by-decoration --decorate --oneline --color=always | tee /dev/tty)\" ] ; then read -rp \"These changes will be deleted permanently. OK? [yN]\" yN ; case \"$yN\" in [Yy]*) : ;; '' | [Nn]* | *) echo Aborted. ; exit 1 ;; esac ; fi ; for i in `seq 3` ; do if [ -n \"$(realpath --relative-to=\"$REPO\" . | awk '! /^\\.\\./')\" ] ; then cd `dirname $REPO` ; fi ; rm -rf \"$REPO\" ; REPO=`dirname $REPO` ; if [ -n \"$(ls -A \"$REPO\")\" -o \"$(ghq root)\" = \"$REPO\" ] ; then break ; fi ; done ; echo Deleted. ; :"

長すぎる。

ghqで管理しているリポジトリの削除を試みます。変更や未プッシュのコミットがあった場合は[yN]で確認を取ります。削除したことによって親ディレクトリが空になった場合、それも削除してくれます。三回rm -rfするかghq rootに達した場合には中断するようになっているので、あなたのホームディレクトリを破壊したりしません。たぶん。

万が一使う場合は、神経症者になったつもりで、このスクリプトが何をやっているのか必ず具に確認してからにして下さい。

こちらに似たようなソリューションがあります。というか参考にしました。

おわり


  1. ghqはsvnなどもサポートしているので本当はよくないのですが、個人的にはgitしか使っていないので……。 

  2. 筆者のことです。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away