僕のソース管理術


GHQ+peco

僕のソース管理術


pecoってなに?

  • 行をインクリメントサーチして、結果を返す
  • CLI
  • Goで作られてる
  • percolの亜種

えっ?なにがいいのそれ?

利点が文章では伝わりにくいので


peco install

ここからダウンロードできる
Releases · peco/peco https://github.com/peco/peco/releases

# mac
% brew install peco

# 他
% cd /usr/local/src
% wget https://github.com/peco/peco/releases/download/v0.3.3/peco_linux_amd64.tar.gz
% tar -C /usr/local/bin -xzf peco_linux_amd64.tar.gz

例) % ls -al | peco

絞込みながら、ファイル一覧が見て取れる

inline


応用例: history search

とりあえず、.bashrcにコピペ
『 bind '^r'』= Ctrl-R

% cat >> .bashrc
function peco-select-history() {
    typeset tac
    if which tac > /dev/null; then
        tac=tac
    else
        tac='tail -r'
    fi
    BUFFER=$(fc -l -n 1 | eval $tac | peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle redisplay
}
zle -N peco-select-history
bindkey '^r' peco-select-history

うろ覚えなコマンドとか探すの便利!!
これは、life-changing!

inline


応用例: ファイル検索

vimで階層の深いファイル開きたい時とか便利!

inline


GHQ


GHQってなに?

ソース管理ツールです!!


その前にGoのお作法

## コードのチェックアウト方法
% go get github.com/motemen/ghq

$GOPATH
|-- src/
|   `-- github.com/
|       `-- motemen/
|           `-- ghq/
|-- bin/
     `-- ghq

ファイル管理体型

  • % export $GOPATH=$HOME
  • 自分は、go getですべてのソースを$GOPATH/srcに 集約管理してます
  • $GOPATH/src/domain/user/reposname
    • github.com/motemen/ghq
    • stash.example.com/awesome-app/awesome-app

ここでGHQの設定

cat >> ~/.gitconfig
[ghq]
  root = ~/src

GHQコマンド

すると、~src/に並んでいるリポジトリリストが!

% ghq  list | head
bitbucket.org/mprasil/docker_dokuwiki
ghe.exmaple.com/awesome_tool/awesome_api.git
ghe.exmaple.com/awesome_tool/awesome_batch.git
ghe.exmaple.com/awesome_tool/awesome_core.git
ghe.exmaple.com/awesome_tool/awesome_filter.git
ghe.exmaple.com/awesome_tool/awesome_flume.git

GHQ list [query]

検索も可

% ghq list awesome
ghe.exmaple.com/awesome_tool/awesome_api.git
ghe.exmaple.com/awesome_tool/awesome_batch.git
ghe.exmaple.com/awesome_tool/awesome_core.git
ghe.exmaple.com/awesome_tool/awesome_filter.git
ghe.exmaple.com/awesome_tool/awesome_flume.git

GHQ+pecoの設定をzshrcへ

cat >> ~/.zshrc
function peco-src () {
    local selected_dir=$(ghq list --full-path | peco --query "$LBUFFER")
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-src
bindkey '^T' peco-src

GHQ+peco

inline



enjoy!