LoginSignup
3
0

More than 3 years have passed since last update.

[個人開発あるある] 失われたリポジトリを発掘する旅に出る

Last updated at Posted at 2020-12-06

PCの中に埋もれたgitリポジトリありませんか?私はたくさんあります。以下の方法で探り当てたリポジトリを見ると自分では全然覚えてない作りかけの物が出てきました。実家のタンスの奥から子供の頃のオモチャが出てきたような気分です。

もともとは「数ヶ月さわってないプロジェクトを久しぶりに開くにはどこに置いてたか探すことから始めなきゃならない」という当たり前のことに気付いたからでした。
ghq等を使ってる方はちゃんと管理できてるんでしょう。しかしリポジトリ迷子の私みたいな方はたくさんいると思います。そして思いついたのがpecoを使った方法です。

peco
peco公式より

こんな感じでリポジトリの一覧から選んでVSCODEで開けたら便利ですよね。
その方法を実現する手順は以下の通り。

  1. findコマンドでPC内からリポジトリの一覧を作成&保存
  2. zshrcにpecoの設定を追加
  3. zshrcにfindのエイリアスを追加

これだけです。

ちなみにpecoのインストールについては公式を御覧ください。Homebrew, Scarf, apt等でもインストールできます。

peco/peco: Simplistic interactive filtering tool

1. findコマンドでPC内からリポジトリの一覧を作成&保存

> find ~/Documents -regex ".*/.git" > /path/to/git_paths.txt

引数の~/Documentsはgitリポジトリが眠っていそうな大体の場所です。まさか~/Moviesとか~/Musicなんかにリポジトリを置いてる人はいないでしょう。findは時間がかかるのである程度検索範囲を絞ったほうが良いです。私は基本的に~/Documents以下に置いているのでここを検索対象にしました。

/path/to/git_paths.txtは一覧を保存する場所です。適当なpathを指定してください。
ちなみに私の場合、コマンドの実行は約3分。170のリポジトリが発掘されました。

2. zshrcにpecoの設定を追加

.zshrc(他のshellならその設定ファイル)を開いて以下を追記します。

function peco-select-repository() {
  local repo=$(cat /path/to/git_paths.txt | sed s/\.git$// | peco)
  if [ -n "$repo" ]; then
    print -z "${repo}"
  fi
}
alias gp=peco-select-repository

内容を解説すると2行目のcatでファイルを読み込み、sedで末尾の.gitを削除(取得したいのは.gitディレクトリの親ディレクトリなので)、そしてpecoに渡しています。

4行目のprint -z "${repo}"でパスを出力します。そのまま実行しても仕方がないので目的により書き換えたほうが良いかもしれません。

print -z "cd ${repo}"   # 移動したい場合
print -z "code ${repo}" # VSCODEで開きたい場合

個々の目的に応じて書き換えてください。

これを保存してターミナルを開き直すと使えるようになります。
gp+returnでリポジトリの一覧が表示されます。

3. zshrcにfindのエイリアスを追加

1で実行したfindは定期的に行って更新する必要があります。とは言っても最近のリポジトリは覚えているでしょうから頻繁に行う必要はありません。数ヶ月に1回で十分だと思います。
その時にfind hogehoge~~~と書くのは面倒なのでaliasを設定しておきます。.zshrcに書きます。

alias reposearch='find ~/Documents -regex ".*/.git" > /path/to/git_paths.txt'

ターミナルを開き直すとreposearchでfindを実行できるようになります。

まとめ

最終的に私の.zshrcに追記したのはこんな感じです。
my_git_repo.txtはzshrcの近くにある方が管理しやすいと思うので同じ階層の~/.zsh/に置くことにしました。

function peco-select-repository() {
  local repo=$(cat ~/.zsh/my_git_repo.txt | sed s/\.git$// | peco)
  if [ -n "$repo" ]; then
    print -z "code ${repo}"
  fi
}
alias gp=peco-select-repository
alias reposearch='find ~/Documents -regex ".*/.git" > ~/.zsh/my_git_repo.txt'
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0