Closed18

ghqによるリポジトリ管理

Taisei.MTaisei.M

ghqとfzfを用いてGithubリポジトリの管理を行っているが、プライベートと仕事のリポジトリが混在、かつかなりの量になってきていてリポジトリ移動がしづらい

ghqを改めてきちんと調べることで、リポジトリ管理ツールとして使いこなしたい

Taisei.MTaisei.M

ghqとはなにか

Taisei.MTaisei.M

ghqをpecoやfzf等のインタラクティブフィルタツールと組み合わせれば、手元に数百を超えるリポジトリがあっても、瞬時に目的のリポジトリに移動できます。さらに、OSSをカジュアルに手元にcloneできるようになるため、ソースコードリーディングが捗るという嬉しい副作用もあります。実際作者の手元には1000を超えるリポジトリがあります。

自分はfzfと使ってctrl + Gでリポジトリ移動できるようにしてる、めっちゃ便利

Taisei.MTaisei.M

ローカルリポジトリを一覧表示

ghq list
Taisei.MTaisei.M

ghq getしたリポジトリの配置先確認

ghq root

デフォルトで$HOME/ghqとなっているが、設定で変更可能とのこと

Taisei.MTaisei.M

リポジトリ取得ディレクトリの設定

ghqは設定にgitconfigを用います。ghq.rootがリポジトリ取得ディレクトリのための項目です。

gitconfigを用いてリポジトリ取得ディレクトリの設定ができるらしい

Taisei.MTaisei.M

ghq.rootが複数設定されているときは、一番後ろに書かれたディレクトリがプライマリとなる

[ghq]
root = ~/go/src 
root = ~/myprojects

この場合、
go get -> ~/go/src 配下
ghq get > ~/myprojects配下

go get使ったことないけどGoのパッケージインストールで利用するやつなのかな

Taisei.MTaisei.M

ghq listでは~/myprojects及び~/go/src両方の配下のリポジトリが一覧されます。

Taisei.MTaisei.M

リポジトリを取得する ghq get

$ ghq get <target>

OPTIONS:
    --update, -u                Update local repository if cloned already (default: false)
    -p                          Clone with SSH (default: false)
    --shallow                   Do a shallow clone (default: false)
    --look, -l                  Look after get (default: false)
    --vcs vcs                   Specify vcs backend for cloning
    --silent, -s                clone or update silently (default: false)
    --no-recursive              prevent recursive fetching (default: false)
    --branch branch, -b branch  Specify branch name. This flag implies --single-branch on Git
    --parallel, -P              Import parallelly (default: false)
    --bare                      Do a bare clone (default: false)
    --help, -h                  show help
Taisei.MTaisei.M

targetはhttps://{{Host}}/{{Path}}が基本形です。https://は常に省略可能で、ホストがgithub.comの場合、それも省略できます。

$ ghq get https://github.com/x-motemen/ghq
$ ghq get github.com/x-motemen/ghq
$ ghq get x-motemen/ghq
Taisei.MTaisei.M

SSHで行いたい場合、以下2つは同義

$ ghq get git@github.com:x-motemen/ghq.git
$ ghq get -p x-motemen/ghq
Taisei.MTaisei.M

プロジェクトごとに取得ディレクトリを切り替える(ghq.<base>.root)

これはまさに今悩んでることを解決してくれるやつ

Taisei.MTaisei.M

うーん、.gitconfigでこういうふうに設定することで実現できそうだけどうまくいかないな

[ghq]
root = ~/hobby

[ghq "https://github.com/mycompany"]
root = ~/work

[ghq "https://myvcs.example.com"]
root = ~/work
このスクラップは2024/09/22にクローズされました