読者です 読者をやめる 読者になる 読者になる

日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

fossil を使ってみる

最近、個人ツールではあるがちょっと規模が大きめのものを作ろうと色々検討している時、SCM 含むプロジェクト管理ツール使うかどうしようかと頭をもたげてきた。開発業務をまともにやってきた訳ではない為この手のツールを使った事がない。

そんなに比較検討した訳ではないが、使う要件として

  • 自分ひとりなので導入・運用コストが軽いやつ
  • 公開するものではない

この辺りで適していそうな fossil なるものを使ってみる事にした。どうやら sqlite の作者が作ったものらしい。

以降は自分の作業ログ的なものを書いていく。

インストール

単一実行ファイルなので PATH が通った所に置くだけ。

リポジトリ作成

> fossil init hoge.repo
project-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
server-id:  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
admin-user: xxxxxx (initial password is "xxxxxx")

ユーザ ID は今ログインしてるユーザ、パスワードは初期のが何か自動生成される。このメッセージはパスワードも書かれているので一応保管しとく。余談だが .repo と拡張子付けないと作れない事に小ハマりしたw

リポジトリ設定

UI 画面起動

> fossil ui c:\path\to\hoge.repo

要パス指定。自分の Windows7 環境だとコマンド叩いた後 Firefox で勝手に起動した。またこのコマンドは fossil によるローカル Web サーバが動くので別コマンドプロンプト立ち上げて動かしとくのが良さそう。

プロジェクト名設定

立ち上がると出てくる画面に Project Name 入れてくれと出るのでそれに従い setup/config でプロジェクト名を設定。leiningen で作ったプロジェクト名と同じにした。後は Project Description に軽く概要だけ書いて設定。他にも WikiWYSIWYG にするかどうかとか Wiki マークアップに HTML を使うかどうかの設定とかあるがそれは変えずにそのままとした。

ローカル時間に変更

Timeline 見ると、初っ端のリポジトリ作られました的なものがあるが、その時間が UTC だったので Admin -> Timeline -> Use UTC のチェックをオフに変更。

ファイル追加

無視ファイル指定

コマンドラインだと fossil settings ignore-glob を使うようだが、Web UI にも setting にあったのでそこで設定。

.gitignore, repl-port, *.class,*.dependencies

leiningen でソース管理外にするのはこれくらいかな。残念ながらディレクトリ指定はできない模様。ディレクトリ指定できれば target 以下を除外するとかもう少し簡単にできるんだがしょうがない。

リポジトリチェックアウト

> fossil open hoge.repo

最新のワーキングコピーをカレントフォルダに作るコマンドだが、全く新規の場合は当然何もない。また、後述のファイル追加後だと _FOSSIL_ とか言うテンポラリファイルらしきものができる。

ファイル追加

hoge という leiningen プロジェクトフォルダ直下に移動した上で fossil add . とする。

> fossil add .
ADDED  hoge/doc/intro.md
ADDED  hoge/LICENSE
ADDED  hoge/project.clj
ADDED  hoge/README.md
ADDED  hoge/src/hoge/core.clj
ADDED  hoge/test/hoge/core_test.clj

無視ファイル・フォルダ設定効いてるみたい。

変更確認

コミット前にどのファイルが変更されるかを確認するためのコマンドはこれ。

fossil changes

コマンド実行結果は add 時と同じなので割愛。

変更確定

fossil commit -m "describe changes."
  • m オプションで変更点を記述するみたいだが敢えて -m を指定せずにコマンド叩くとメモ帳が開いてコメント入れてくれと出た。

日本語を入れて Web UI で Timeline 確認してみるとちゃんと表示できてる。

ただ改行の Warning がちと気になる。

./doc/intro.md contains CR/NL line endings. Use --no-warnings or the "crnl-glob" setting to disable this warning.
Commit anyhow (a=all/c=convert/y/N)? a
New_Version: 19dd6de9a5e6be5b62509a68023ea34350dbe1d2

改行は自分で管理するので今回はチェックしないように変更。やり方は Setting にある cnrl-glob の設定値に * を入れれば OK。

ワークフロー

  1. チェックアウト fossil open c:\path\to\fossil.repo
    • これもバッチ作って PATH が通った所に置いといて、1 日の開始にまずチェックアウトかける
  2. ゴリゴリコーディング
  3. 変更
    • ファイル追加なら add
    • ファイル削除なら rm
    • 既に管理下にあるファイルの変更ならコミットまで特に何もする必要なく、こまめにファイル保存だけしとく
    • 元に戻したければ revert
  4. そんでキリの良い所でコミット

他調べた事

diff

Web UI だと Timeline -> Show files で diff のリンクが出て前のリビジョンとの差分が確認可能。コマンドラインでも diff とか gdiff があるようだが動作未確認。

emacs 連携

Emacs-Fossil: Emacs Integration for Fossil
ここ見るとできなくはなさそうだがめんどくさそうな割に恩恵が少なさそうなので自分は未設定。

UI をスタートアップ設定する

UI 用組込 Web サーバは PC 起動したら動かしっぱなしにしておきたいのでスタートアップ用のバッチファイルを用意する。中身は単に fossil ui c:\path\to\fossil.repo なだけ。Web ブラウザを起動させたくない時は fossil server で良いらしいが一人用だし ui でいいや。

これの繰り返しかな。

複数人でやる場合はログコメントは入れてもらうとかキリの良い所でのコミットを守ってもらうとか追加時はちょいと話し合うとか緩いながらもある程度のルール決めはした方が良さ気。

他気になる部分

SQL 直接叩けるっぽい

スキーマ確認は必要だが、内部 DBMSsqlite 使ってる事もあり SQL 直接叩けるみたい。UI では見せてないような細かい情報もこれで取れるんじゃないかなとちょっと期待。Web UI だと何のチェックもしてないから十分注意してくれとあるが、使うにしても自分は SELECT しかやるつもりはないので多分大丈夫かな。