.dotfilesに.emacs.dを結合する
はじめに
前略
無知な私は.dotfilesと.emacs.dを別々のリポジトリで管理していたので
いい加減に統合したいと思います
早々
いろいろ調べて得られた知見(セオリー)としては
1.別ブランチに移動してコピー
2.masterにマージ
という様にブランチを一手間経由するのが確実で良いようです
1.別ブランチに移動してコピー
Emacsブランチの中身になるリモートリポジトリを登録する.
.dotfiles
ディレクトリに移動し,emacsリモートリポジトリを新しいリモート先として登録
$ git remote add Emacs git@github.com:hightoro/emacs
確認
$ git remote -v
フェッチして,新しいブランチを作成する
Emacsブランチに中身をぶちまける
$ git fetch Emacs $ git checkout -b Emacs Emacs/master
これで,ブランチが切り替わり,ディレクトリの中身がemacs.gitのものになります
確認
$ git branch -a
2.masterにマージする
git filter-branch
を使用してサブディレクトリ.emacs.dを作成
すこしだけこのコマンドの解説を読みました
git filter-branch
はコミット履歴に大幅な改変を加えたいときに使用するコマンドだそうです
gitではコミット履歴は(他のプロジェクトメンバに公開して供するまでの間は)
自由に改変すべきだという思想があるそうです
そのためにgit rebase
や各種オプションが用意されているわけです
そしてこのgit filter-branch
はその中でも「複数のコミットに対して,
ある種の改変を行いたい」場合に使用される最終兵器だそうです
今回はgit filter-branch --tree-filter
を使用します
git filter-branch --tree-filter
はこれまでの既存のコミット履歴に対して,
過去のある時点に何らかの操作を適応し、そこから現在までのコミット履歴を一括して改変するものらしいです
ではこれまでの./で行ったコミットをすべてサブディレクトリ.emacs.d/の中で起こったことにしましょう
$ git filter-branch -f --tree-filter "mkdir .emacs && git mv -k {,.[\!.],..[\!.]}* .emacs.d/"
mkdirした.emacs.dの中にぶちまけた中身をすべて放りこんだ上で,これまでにコミット履歴の一部が改変されます
Emacsブランチをmasterブランチにマージ
最後にEamcsブランチをmasterブランチにマージします
$ git checkout master $ git merge Eamcs
これで.emacs.dサブディレクトリにリモートリポジトリが追加され,
コミット履歴にもリモートリポジトリemacsのこれまでのコミット履歴がマージされる