~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

git で dotfiles を を管理してみる

Posted on Fri Oct 17 00:45:38 +0900 2008 by nabeken

注意 模索しながら書いているので、いろいろと最適なモデルを探っています。変更点は一番したのログを見てください。

使っていると、ラップトップ、デスクトップ、サーバでそれぞれテンプレートを1つ保持するのがよいという結論に至りました。

まず、手元で使っているのを git リポジトリへ入れます。最初はひとまずすべてを master へ放り込みます。

  • 自宅デスクトップ
  • ラップトップ
  • 学内マシン
  • バイト先のマシン

の4つの環境があります。それぞれは共通したものもあれば、環境特有の設定も入ります。1つのリポジトリで、それぞれの設定はブランチで運用してみることにします。

まず、テンプレート用ブランチを作ります。

 # git clone git.example.org:Repo/moge
 # cd moge

ここでは、サーバ用のテンプレート用ブランチをつくってみます。

 # git co -b server

ここで、サーバに不必要なファイルを削除していきます。コミットが完了したら、

 # git push origin server:template/server
 # git branch -D server

で、pushします。同じようにして、それぞれテンプレートを作ります。

次に各環境用のブランチを作ります。今回はサーバ用テンプレートを使って作ります。この作業は対象マシンで行います。

 myserver# git clone git.example.org:Repo/moge
 myserver# cd moge
 myserver# git reset --hard origin/template/server

これで、myserverのmasterがtemplate/serverに向きました。 ここから、環境特有の設定を施して、コミットします。

次に git push のデフォルトを環境特有の設定を保存するブランチへ向けます。これにより、cloneしたリポジトリの master とリモートのブランチ の対応を変更できます。(デフォルトは master:master になっている)

 # git config --add remote.origin.push master:your-branch
 # git push

これで、 git push は引数なしで git push origin master:your-branch と同じことになります。よって、各マシンはブランチを意識することなく、コミットして、pushすることができます。

他のブランチへ変更を適用したい

ブランチをマージしてしまうと、異なる用途で履歴が混ざったしまいます。ここでは、マージではなくコミットの変更だけを抽出して、今のブランチへ適用します。

 # git cherry-pick origin/myserver

こうすることで、今のブランチに origin/myserver の HEAD のコミットが適用され、その上で再び今のブランチに対してコミットされます。

更新履歴

  • WIP: git-de-home (Fri, 17 Oct 2008 00:45:38 +0900)
  • mergeしている記述を削除 (Thu, 15 May 2008 19:27:52 +0900)
  • merge の代わりに cherry-pickup/rebase を使うモデルに変更してみる (Thu, 15 May 2008 19:25:41 +0900)
  • マージ例を追加 (Mon, 5 May 2008 01:07:41 +0900)
  • git tips (Sun, 4 May 2008 02:32:58 +0900)
  • gitでドットファイル管理 (1) (Sun, 4 May 2008 02:10:50 +0900)