ローカルに点在するgitリポジトリを一元管理したいアナタに教えたいghq-migrator

gitのリポジトリを管理するのにghqが便利という話を聞いて最近使い始めました。 今回は、ローカルで以前から利用してたgitリポジトリをghq管理下のディレクトリに移動して一元管理するため、ghq-migratorという便利ツールを使ってみたお話。
2019.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

事業開発部の野村です。前回の私の記事ではJavaのサーバーレス開発を紹介しましたが、最近はGoの開発欲が高くなってきてます。

はじめに

gitのリポジトリを管理するのにghqが便利という話を聞いて最近使い始めました。

今回は、ローカルで以前から利用してたgitリポジトリをghq管理下のディレクトリに移動して一元管理するため、ghq-migratorという便利ツールを使ってみたお話です。

ghqとは

予め設定したディレクトリ以下にgitリポジトリをクローンし、一元管理することが出来るツールです。ghq コマンドを使うことで、今あるリポジトリの一覧取得や特定のリポジトリのルートディレクトリへ移動することもできます。

弊社ブログでも以下の通り紹介しております。

様々なソースコードをghqで取得し、管理する

便利なので元々ローカルにあるgitリポジトリもghq使って操作したいのですが、ghq管理下のディレクトリに移動しないと使えないのがちょっと面倒だなぁと思ってました。ghq管理下のディレクトリは複数設定できるのですが、とはいえあちこちにリポジトリが点在している状態をなんとかしたい。

- 救世主 ghq-migrator -

自力でリポジトリ移動するのもよいのですが、何か良いツールはないものか調べてたら以下の記事でghq-migratorという救世主に出会いました。

雑にgit cloneして管理していたリポジトリ群をghq管理下に移行してスッキリさせる - 平常運転

そうそう、こういうのだよこういうの!

ghq-migratorの使い方

ghq-migratorのREADMEにも書いてますが、bash,sedが利用可能であることが前提です。当然gitも。

ghqディレクトリに移動可能か確認する

ghq-migrator.bashをダウンロードして、まずは動作確認のため以下のコマンドを実施してghqディレクトリへの移動が可能かを確認します。

/path/to/repo は移動したいローカルリポジトリのパスを指定します。

$ ghq-migrator.bash /path/to/repo/
/path/to/repo/
move this repository to /Users/nomura.keichi/.ghq/github.com/K1-Style/repo
specify GHQ_MIGRATOR_ACTUALLY_RUN=1 to work actually

移動可能であれば、move this repository to <移動先ディレクトリ> を表示します。

ghqディレクトリに移動

上記のコマンドに表示している通り、実際のディレクトリ移動には環境変数 GHQ_MIGRATOR_ACTUALLY_RUN=1 を指定して再度ghq-migrator.bashを実行します。

$ GHQ_MIGRATOR_ACTUALLY_RUN=1 ghq-migrator.bash /path/to/repo/
/path/to/repo/
move this repository to /Users/nomura.keichi/.ghq/github.com/K1-Style/repo

ghq list コマンドで、移動したリポジトリが表示できていれば成功です。

git remote を複数設定したリポジトリを移動する場合

GHQ_MIGRATOR_PREFER_ORIGIN=1 を指定することで、remote.origin.url に定義したURLに合わせてディレクトリを作ってくれます。

ディレクトリ移動可能か確認する場合

$ GHQ_MIGRATOR_PREFER_ORIGIN=1 ghq-migrator.bash /path/to/repo/

ディレクトリ移動

$ GHQ_MIGRATOR_PREFER_ORIGIN=1 GHQ_MIGRATOR_ACTUALLY_RUN=1 ghq-migrator.bash /path/to/repo/

さいごに

ghq-migratorを使って、既存のローカルリポジトリを簡単にghq管理できる方法を紹介させていただきました。

ghqは、pecofzfをインストールして組み合わせて使うと、ターミナル上でインタラクティブにローカルリポジトリの切り替えが実現できます。 私はfzfを使って、以下のようにエイリアス登録して利用してます。ぜひお試しください。

alias g='cd $(ghq list -p | fzf)'

それでは今回はこれにて。