2007年12月27日 プライベートモードで記事を投稿できるようになりました

2007年12月25日 タグクラウド とタグ別ページを表示できるようになりました

2007年12月20日 カテゴリ別モブログ機能リリースのお知らせ

2007年12月18日 「話題のブログ」が新しくなりました

2007年12月18日 プレビュー機能強化と新リスログプラグインのお知らせ

2007年12月13日 投稿・編集を便利にするブックマークレットのご紹介

2007年12月11日 バリューコマースの商品をカンタンに紹介できるようになりました。

2007年12月11日 アップロードしたファイル一覧にサムネイルを表示しました

2007年12月10日 ブログ検索がさらに使いやすく！

2007年12月07日 ブログのページ移動（ナビゲーション機能）を強化しました

Subversion移行の準備

ssh (server) 'cat (remote_file)' | diff (local_file) -

rsync --delete -e ssh -auvzC --dry-run (local_dir) (server):(remote_dir) | egrep -v '/$' | egrep -v '^(wrote|total|building)' > files.diff



etc.

find . -name ".#*" | xargs rm

find . -name "*~" | xargs rm



etc.

find . -name "*.pm" | xargs svn propset svn:keywords Id

find . -name "*.pm" | xargs svn propset svn:eol-style native

find . -name "*.sh" | xargs svn propset svn:executable ON



etc.

propset svn:ignore -F .cvsignore .

propset svn:ignore var .

subversion移行後の作業手順

alias svn='echo '\''*** svn should not normally be invoked by root. Check again and use /usr/bin/svn if you are really sure. ***'\'''

その他、作業に便利な tips

[miscellany]

enable-auto-props = yes



(中略)



[auto-props]

## images

*.png = svn:mime-type=image/png

*.jpg = svn:mime-type=image/jpeg

*.gif = svn:mime-type=image/gif

## executables

*.pl = svn:keywords=Id;svn:eol-style=native;svn:executable

*.sh = svn:keywords=Id;svn:eol-style=native;svn:executable

## source files

*.pm = svn:keywords=Id;svn:eol-style=native

*.sql = svn:keywords=Id;svn:eol-style=native

*.conf = svn:keywords=Id;svn:eol-style=native

*.txt = svn:eol-style=native

Makefile = svn:eol-style=native

## htmls

*.inc = svn:eol-style=native

*.html = svn:eol-style=native

set blogrepos = 'http://(リポジトリのURL)'

blogrepos='http://(リポジトリのURL)'

ブランチでの普段の開発手順

svn copy -m "(メッセージ)" $blogrepos/trunk $blogrepos/branches/(ブランチ名)



svn switch $blogrepos/branches/(ブランチ名)

svn merge --dry-run -r (分岐時点でのリビジョン番号):(trunkの最新リビジョン番号) $blogrepos/trunk

svn merge -r (分岐時点でのリビジョン番号):(trunkの最新リビジョン番号) $blogrepos/trunk

svn commit -m "merged from trunk ...(メッセージ)"

svn switch $blogrepos/branches/(ブランチ名)

svn info

svn switch $blogrepos/trunk

svn merge --dry-run -r (分岐時点でのリビジョン番号):(ブランチの最終リビジョン番号) $blogrepos/branches/(ブランチ名)

svn merge -r (分岐時点でのリビジョン番号):(ブランチの最終リビジョン番号) $blogrepos/branches/(ブランチ名)

svn commit -m "merged from branch...(メッセージ)"

svn copy -m "(メッセージ)" $blogrepos/trunk $blogrepos/tags/(タグ名)

svn delete $blogrepos/branches/(ブランチ名)

いま気になっていること

最後に

「技術情報」カテゴリの最新記事

こんにちは。ブログ担当のnabokov7です。さてみなさん、ここのところ、livedoor Blog の新機能リリースのペースが上がっていることにお気づきでしょうか。12月だけでこれだけの 新規リリースのお知らせ を出しました。以前に比べてスピーディーなリリースが可能になった背景には、最近新しい仲間も増えてきたといった要因もあるのですが、もうひとつの大きな理由として、最近、開発を CVS から Subversion へ移行し、を確立できた、というのがあります。いまさらサブバージョンかよ、という感はあるかと思いますが、ブログのプロジェクトは3年前からCVSベースで開発を続けてきており、14000以上のファイルがCVS管理下にあるのです。また、本番化の方式として・本番化専用のワーキングディレクトリで cvs update をかけて最新版にし、・rsync で、新しくなったファイルだけを本番サーバに同期する (rsync --delete -e ssh -auvzC などを使った本番化用スクリプトがあります)という手順をとっているため、といったことが長年積み重なり、とても気軽には移行に踏み切れない状態が続いていました。しかし、開発担当者の数が増えてくると、などの問題が開発効率の足を引っ張るようになってきます。かといって、CVSでブランチを切って作業するのはなかなか面倒です。そこで思い切って Subversion への移行を敢行したわけですが、その際のメモや、気付いた細かい点などを書き、年末の大掃除にかえたいと思います。まず、移行作業の基本コンセプトとして(あとで作業者各々が、旧ワーキングディレクトリから必要なファイルをサルベージしてきて新リポジトリへコミットしていくこと。)というルールを決め、それに基づいて、以下のように作業をすすめました。まず、現在のCVSのワーキングディレクトリを別の場所に退避し、それをディレクトリまるごとコピーしてその上で作業をすすめます。以下のようなコマンドラインを駆使して、実際の本番機にあるファイルと旧ワーキングディレクトリとの差分をとり、各ファイルの、いま現在本番稼働しているリビジョンを集めてきます。↓ローカルのファイルと本番機上のファイルのdiffをとる↓あるローカルディレクトリ以下のファイルすべてのうち、本番サーバの方が古い、あるいは本番サーバにはないファイルのリストを作る。(rsync の --dry-run を使うのがミソ)旧ワーキングディレクトリに残ったままになっている様々な一時ファイルを掃除します。↓テンポラリファイル, バックアップファイルの削除.cvsignore や CVS/ ディレクトリなど、CVS専用のファイル群も同様にして削除します。(.cvsignore については後の「6. 属性を整える」も参照)私もマカーですけど・マカーの作業者がコミットしてしまいがちな ".DS_Store" などもこの機に忘れず削除しておきましょう。・MacOSはファイル名の大文字と小文字を区別しないので、"foo.GIF" と "foo.gif" が両方あると後々ローカルでの作業時にはまります。両方存在するのはたいてい間違いなので、どちらか一方にまとめておきましょう。履歴は必要になったときにCVS側を見ればいいので、心機一転、新プロジェクトとして import します。↓svn:executabe, svn:eol-style, svn:keywords ぐらいはまとめて propset しておく↓ .cvsignore を使っていた場合は、その内容を svn:ignore 属性に反映させておく(.cvsignore のあるすべてのディレクトリで以下を実行)特にうちの場合、リポジトリ配下にあたる場所に var ディレクトリがあり、開発サーバではここにログやテンポラリファイルが書き出されています。して除外するなどしておかないと、間違って var 以下のファイルをコミットしてしまったり、開発サーバ上で別ブランチにスイッチするときにコンフリクトが起きたりしてかなりややこしいことになります。移行後は、以下のような基本ルールを決めました。というのが基本。・すぐ本番に反映する手直し/緊急バグフィックス的なものは trunk で作業してもOKだが、それ以外の場合はこと。・開発サーバで switch するときは、社内IRCで一声かける。作業がおわったら trunk に戻す。※うちは開発サーバが一人一台ないので、開発サーバ上のワーキングディレクトリを自分のブランチに switch しては確認し、また trunk に戻す、という作業を日常的にすることになります。・開発サーバ上で svn を root で実行しないこと。※これもうちの開発環境独特の問題なのですが、開発者が皆 root でログインすることが多いため、そのままうっかり svn update とかされると更新されたファイルのパーミッションが全部 root になってしまって後始末が面倒です。ブログの開発サーバでは、root の .bashrc にといった alias を仕込んであります。気持ち程度の策ですが。↓自分のホームの ~/.subversion/config に以下を追加しておく。(新規にファイルを add するときに属性が勝手にセットされます。)・ ~/.tcshrc にを追加しておく。(Macの場合は /Private/etc/bashrc に↓です)こうすると、コマンドラインで $blogrepos とするだけでリポジトリのURLが指定できるので楽です。以下、にリポジトリのURLがセットされているという前提で、ブランチでの開発手順を書いておきます。※なお、ブランチやタグの命名規則については、 こういった慣例 等がありますので参考に。(ブランチにswitch中のローカルディレクトリで)↑これで変更を確認し、↓これで実際に現在のワーキングディレクトリにマージする問題なければそれをブランチへ commit(開発サーバ上のワーキングディレクトリで)いまどのブランチにいるか分からなくなったときはもちろんまずローカルのワーキングディレクトリを trunk に switch しておく。そこで↑これで変更を確認し、↓これで実際にマージするコンフリクト等をすべて解消し、内容が確認できたら、trunk へ commitsvn switch が異常に重いです。スイッチ完了までにトイレに行って帰って来れる程時間がかかります。さすがにファイルが一万以上もあるプロジェクトをワーキンディレクトリ丸ごとスイッチするのは、チェックだけでそれぐらいかかってしまうのでしょうか。それとも単に開発サーバが重いだけなのか... 忙しくてそのへんを検証する時間もない年末でした。早々に、次は Git に移行だ、とかいった事態になるのでしょうか...年末ぎりぎりにリリースされた ブログのプライベート記事機能 ですが、実はもともとの予定には OpenID対応ははいっていませんでした。実装もだいたい終わり、構成書のまとめやらhtmlコーディングの段階に入っていたある週末にふと、、と思い立って実装し、週明けの月曜にという感じで機能追加が決まりました。他の会社ではなかなかこうはいかないと思います。素早い対応のできる (そして svn switch が理解できる) ディレクター他全チームメンバーに感謝致します。