開発機に必要なリポジトリをまとめてcloneしたい
【mise】mise bootstrapで開発機のセットアップを宣言的に管理する
で紹介したmise bootstrapのうち、gitリポジトリのcloneと更新を担当するのがmise bootstrap reposである。mise.tomlの[bootstrap.repos]に必要なリポジトリを列挙しておくと、新しい開発機でもまとめてcloneできる。
このコマンドはDockerの使い捨てコンテナで動作を確認した。
基本: urlでリポジトリを指定する
[bootstrap.repos]にclone先のパスをキー、urlにリポジトリのURLを指定する。
[bootstrap.repos]
"~/myrepo" = { url = "https://github.com/example/myrepo.git" }
$ mise bootstrap repos apply -y
Cloning into '/root/myrepo'...
done.
mise repos: applied ~/myrepo
既にcloneされている場合は何もしない冪等な動作になる。
$ mise bootstrap repos apply -y
mise repos: 1 repo(s) already current
mise bootstrap repos statusで状態を確認する
mise bootstrap repos statusで、各リポジトリが現在どういう状態にあるかを確認できる。
$ mise bootstrap repos status
~/myrepo https://github.com/example/myrepo.git missing
cloneした後に確認すると、状態がcurrentに変わる。
$ mise bootstrap repos status
~/myrepo https://github.com/example/myrepo.git current
–dry-runでプレビューする
mise bootstrap repos apply --dry-runで、実際には実行せず実行されるgitコマンドだけを表示できる。
$ mise bootstrap repos apply --dry-run
git clone https://github.com/example/myrepo.git /root/myrepo
updateでリモートの変更を取り込む
applyはまだcloneされていないリポジトリを新規にcloneするだけで、既にcloneされたリポジトリのリモートの更新は取り込まない。リモートの最新状態を反映するにはmise bootstrap repos updateを使う。
$ mise bootstrap repos update -y
From https://github.com/example/myrepo
722b6b1..b5c553a main -> origin/main
Updating 722b6b1..b5c553a
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
mise repos: updated ~/myrepo
ローカル変更があると更新はエラーになる
コミットされていないローカルの変更が残っている状態でupdateを実行すると、意図せず変更を失わないようエラーになる。
$ mise bootstrap repos update -y
mise ERROR repos: ~/myrepo has local changes; commit, stash, or clean them before bootstrap
複数リポジトリを一括更新する際、一部のリポジトリだけ手元で作業中の場合は--skip-dirtyを付けると、ローカル変更があるリポジトリだけスキップして残りを更新できる。
$ mise bootstrap repos update --skip-dirty -y
mise WARN repos: ~/myrepo has local changes, skipping
execで全リポジトリにコマンドを実行する
mise bootstrap repos execで、[bootstrap.repos]に登録した全リポジトリに対して同じコマンドをまとめて実行できる。
$ mise bootstrap repos exec -- git log --oneline -1
repo: ~/myrepo
b5c553a update
複数のリポジトリを横断して最新コミットを確認したり、一括でgit fetchのような操作をしたい場合に使える。
