シェル zsh の便利な設定をまとめて導入可能な prezto の設定を複数 PC で同期させるための細工についての備忘録です.なお,Prezto の導入や設定については
とか
をご覧ください.
今回の目標は以下の通りです.
- Cygwin と MacOS で同じものを使う
- Git で管理する(私の場合はローカルに GitLab サーバを立てています)
- 本家の更新に追従できるようにする.
Cygwin と MacOS で同じものを使う
単に if で OSTYPE を判定してやれば良いだけですね.例えば
if [[ "$OSTYPE" == darwin* ]]; then alias cygstart='open' fi if [[ "$OSTYPE" == cygwin* ]]; then alias open='cygstart' fi
を ~/.zshrc に設定すれば良い訳です.なお,Cygwin の cygstart と MacOS の open は互いに同じようなコマンドで,私の場合,どっちでも使えるよう実際に上のような設定を行っています.
Git で管理する & 本家の更新に追従できるようにする
まず,Prezto を使う最初の(1台目の)PC の設定は以下の通りです.なお,ローカルに立てている私的な Gitlab のサーバ名を gitlab.*****.local としておきます.
- ローカルに Prezto を clone する.
- origin の push 先を GitLab に向ける.
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" $ cd .zprezto $ git remote set-url --push origin https://gitlab.****.local/hyt/prezto.git $ git remote -v origin https://github.com/sorin-ionescu/prezto.git (fetch) origin https://gitlab.****.local/hyt/prezto.git (push)
- ローカルに hyt ブランチを切り,チェックアウトする.
- remote のエイリアスとして hytorigin を定義し,push, pull 共に GitLab に向ける.
- zprofile zshrc 等のリンクをホームディレクトリに張る.
- 一旦,hyt ブランチの内容を GitLab に push する.なお,-u オプションにより hyt ブランチの上流ブランチを hytorigin/hyt に設定する.
- master ブランチを GitLab に push する.
$ git branch hyt $ git checkout hyt $ git remote add hytorigin https://gitlab.****.local/hyt/prezto.git $ git remote -v hytorigin https://gitlab.****.local/hyt/prezto.git (fetch) hytorigin https://gitlab.****.local/hyt/prezto.git (push) origin https://github.com/sorin-ionescu/prezto.git (fetch) origin https://gitlab.****.local/hyt/prezto.git (push) $ cd ~/. $ setopt EXTENDED_GLOB $ for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}" done $ cd .zprezto $ git push -u hytorigin hyt $ git checkout master $ git push
- それぞれのブランチの上流ブランチを確認
$ git branch -vv * hyt 4f19700 [hytorigin/hyt] Add missing syntax highlighter master 4f19700 [origin/master] Add missing syntax highlighter
- hyt ブランチに個人的な prezto の設定を反映させ,commit し,GitLab に pull する.
# 設定追加後 $ git checkout hyt .... $ git add -A $ git commit $ git push
そして,2台目以降の PC は最初の PC と同じ状態になるよう以下の通り設定します.
$ git clone --recursive https://gitlab.****.local/hyt/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" $ cd .zprezto $ git remote rename origin hytorigin $ git checkout -b master hytorigin/master $ git remote add origin https://github.com/sorin-ionescu/prezto.git $ git remote set-url --push origin https://gitlab.****.local/hyt/prezto.git $ git checkout hyt
何でこんな面倒なことをしてるのか?
要するに本家とローカルの Git リポジトリを共存させたいからです.上の設定だと,
- 本家: master ブランチ
- ローカル: hyt ブランチ
の区分けとなり,通常は hyt ブランチを使う.個人的な alias の変更なんかは hyt ブランチで行いますので,hyt ブランチを個人的な Git サーバに push し,それを他の PC から pull すれば設定を同期できる.
じゃあ,本家がアップデートされたらどうするのかと言うと,
- master ブランチに切り替え pull & push
- hyt ブランチに戻り master を merge & push
- 他の PC で hyt ブランチを pull
すれば良い.本家を同期させる PC をどれか1台にしてしまえばこんな面倒なことする必要無いのですが,こういう設定のアップデートって,気が付いた時に手元で今使っている PC ですぐにやってしまいたい.だからこんな面倒なことをしている訳です.まぁ,何となく master ブランチの push は蛇足な気もしますが,面倒なのでこれで良いことにしておきます.
なお,これは以下のページを大いに参考にさせて頂きました.
私も「追跡ブランチ」って言うのをやめたいと思います.