git-svn で trunk/branch を扱う時の話(暫定)
Subversion で管理されているファイル群を git で利用する際、Subversion 側の trunk, branch を扱う際のフローの現在までのまとめ。まだがっちり運用に至ってないので、若干の手直しが入る可能性もあり。
なおここでは Piece_ORM を例に。あと、git 云々の話はここでは触れない。(まだよーわかってないけど。)
clone 時 branch とかを指定する
git svn clone http://piece-orm.svn.sourceforge.net/svnroot/piece-orm -T trunk -b branches -t tags
これで branch とか tags の情報が git branch -r で見える。ただしローカルのブランチではない。(後述にて補足)
% git branch -r
1.0
branch-1.0
trunk
なぜか svn mv して消えたはずのブランチまで見えちゃってる。
ちなみに git branch しても、ローカルでは master しかないことになってる。
% git branch
* master
なおリモート先のツリーが更新 (ブランチが増えたとか) された場合、fetch して更新する。最後の引数の svn は fetch 対象として指定している名称で、.git/config にこの子の事が初期値として登録されている。変更したり増やしたりも出来る。
git svn fetch svn
ローカルブランチを作る
前述のとおり、clone 時に trunk やら branch やらを指定したものの、clone が終わった直後のローカルには master しかないことになっている。ここで git branch
注意を言われると同時にローカルブランチの作り方を教えてくれるので、その通りにやる。
git checkout -b branch-1.0 branch-1.0
-b 以後の値のうち、前半はローカルブランチ名、後半はリモートのブランチ名。これで、ローカルブランチに branch-1.0 ができるので、git checkout branch-1.0 とかやればよい。
masterブランチをtrunkと等価にする
一見、svn の trunk が git の masterブランチとして作成されているように見せかけて、実際はそうではないケースがある。そうではないというのは、git svn dcommit する対象のリポジトリ URL が、trunk になっていないという状態のこと。恐らく、最後の変更 (ヘッドリビジョン) の対象となった箇所が master として作成されており、場合によっては branch や tags になっている場合がある。
対象ブランチのリポジトリURLがどうなっているかは、git svn info でみれる。この例では、11/14 時点の Piece_Right の info。URL が branches/1.0 になっている。もちろんこのままでは、dcommit する対象は branches/1.0 になってしまう。
% git svn info
Path: .
URL: https://piece-right.svn.sourceforge.net/svnroot/piece-right/branches/1.0
Repository Root: https://piece-right.svn.sourceforge.net/svnroot/piece-right
Repository UUID: 2263376b-7820-3741-b83e-21f0075cfe57
Revision: 475
Node Kind: directory
Schedule: normal
Last Changed Author: iteman
Last Changed Rev: 475
Last Changed Date: 2008-07-28 19:48:51 +0900 (月, 28 7月 2008)
ので、思い切って現在作成されている master ブランチを一度消去して、もう一度 trunk を指定して master ブランチを作ってしまう。
git branche -d master git checkout -b master trunk
これで、master といえば trunk のことを指すようになる。
master と trunk は別!という風にしたいのであれば、master ブランチはそのままにしておいて trunk ブランチを別途作るのも。master = trunk とは言い切れないけども、少なくとも git においてはそのリポジトリのリビジョンヘッドのことじゃあないはず、なので trunk 化してしまっていいのではないかなと。
Emacs (snapshot) の起動プログラム
Emacsを起動する場合、通常はコマンドラインから emacs と叩いたりアプリケーションメニューから選んだりというようなことをしますが、本音をいうと以下のようなことを考慮しながら都合よく振る舞いたいものです。
- Emacsは基本1つしか立ち上げず、ファイル編集を行う際には全て起動済みの Emacs を使う。ターミナルからファイルを指定しての編集をするのも同様。
- Emacsが既に立ち上げっているかどうかなどは考慮する必要はないようにする。
前者の方は、やはり Emacs の起動は若干時間がかかるし、新しいEmacs のウィンドウが2個も3個も立ち上がっているのは格好悪いので、やはり1つ立ち上げておいた Emacs で編集が全て行えるように。
後者の方は、前者の話をクリアする際にあわせて、事前に emacs を立ち上げておいて〜ということはないように。
このような振る舞いを行う機構としては、emacsclient というものを利用すればOKで、まあ結局のところ、EmacsWiki の emacsclient ページがすべてなのですが、snapshot (emacs23) 向けならばこうするようにと書いているとおり、次のような感じのスクリプトをこしらえておきます。
#!/bin/sh emacs='emacs-snapshot' emacsclient='emacsclient.emacs-snapshot' tempuid=`id -u` if [ ! -e "/tmp/emacs$tempuid/server" ] then $emacs & while [ ! -e "/tmp/emacs$tempuid/server" ] ; do sleep 1 ; done fi $emacsclient "$@"
あとは全ての emacs 起動 (コマンドライン、ランチャ等) はこのスクリプトを使って行うようにすればOKです。
一方 .emacs には emacsclient からの情報が受け取れるよう、次のような設定を準備しときます。先頭の方で書いておけばよいです。
(server-start)
なお、Elscreenを使っている環境であれば、次のような設定をあわせて書いておくことで emascclient で指定したファイルが新しい window でオープンされるようになります。
(require 'elscreen-server)
Compiz Config Settings Manager
Compiz Fusion の設定を行う Compiz Config Settings Managerを入れておくと色々よろくできるようになる。
sudo apt-get install compizconfig-settings-manager
Wobbly Windows
外観の視覚効果を「追加効果」にするとあわせて有効化される、あのウィンドウがゆらゆらと蠢くやつが地味に鬱陶しいので、エフェクトの項で無効化しておく。
シフトスイッチャー
ウィンドウ・マネジメントのシフトスイッチャーを有効化し、「次のウィンドウ」「前のウィンドウ」をSuper(WindowsKey)-Tab, Super-Shift-Tabあたりにしておく。
便利なんだけども、通常のAlt-Tabと比べるとちょっと重いのであんまりよろしくない。
Scale
同じくウィンドウ・マネジメントから有効化し、キーボード向けの設定を追加する。Ctrl-Shift-aあたりにした。
便利で軽いんだけども、こちらはマウスで対象ウィンドウを示してあげないといけないのがネック。この手の操作はやはり左手オンリーでさくっとスイッチできるとうれしいんだけどなあ。
個人的なキーボードセットアップ
導入後最初はやはりこの辺をやっとかないとペースが上がらないということで。
キーボード設定
「システム」→「キーボード」でキーボード設定を立ち上げて、レイアウトタブを開いて、レイアウトオプションで以下のことを行う。
Alt/Windowsキーの挙動
Alt and meta are on the Alt keys.
Ctrlキーの位置
CtrlとCapseLockキーを入れ替える
Layout switching
すべてチェックなし状態にする。 (Emacs対策)
キーの入れ替え
その他、上記キーボード設定では行えないキーの入れ替えは Xmodmap を使って行う。
ホームに.Xmodmapファイルを作成。以下はEscと半角/全角の入れ替えと、変換無変換をAltキーにしてしまうという設定。
keycode 9 = Zenkaku_Hankaku keycode 49 = Escape keycode 129 = Alt_L Meta_L keycode 131 = Alt_L Meta_L
で、xmodmapを実行。
xmodmap ~/.Xmodmap
ちなみにキーコードの調べ方は、ターミナルからxevを立ち上げて調べることができる。