fossil を使ってみる
更新履歴
2020/07/13
fossil init --template
の使い方追加- ブログ内記法を Markdown へ変更
- 同じ記事の記法変更は不可の為、Markdown 記法の記事を新規に追加し、旧記事は内容削除、新記事へのリンクを入れ、新記事にも旧記事の注記を追加
2017/09/15
- branch の使い方を追加
記事移行
今回久々に追記したついでに今使ってる Markdown 方式に変更。 しかしはてブロって既存記事の変更はできないのね。微妙に不便。 旧記事 は内容削除して 新記事のリンクだけ残してある。
参考
はてブロヘルプに書いてあるらしい。
いったん作成した記事の編集モードを、後から変更することはできません。
はじめに
最近、個人ツールではあるがちょっと規模が大きめのものを作ろうと色々検討している時、SCM 含むプロジェクト管理ツール使うかどうしようかと頭をもたげてきた。開発業務をまともにやってきた訳ではない為この手のツールを使った事がない。
そんなに比較検討した訳ではないが、使う要件として - 自分ひとりなので導入・運用コストが軽いやつ - 公開するものではない
この辺りで適していそうな fossil なるものを使ってみる事にした。どうやら sqlite の作者が作ったものらしい。
参考リンクとか
- 紹介記事
- 本家
- ドキュメント日本語訳サイト
- 翻訳した原文が古いので、現行の英文との併読は結局必要だがとっかかりには十分
以降は自分の作業ログ的なものを書いていく。
インストール
単一実行ファイルなので PATH が通った所に置くだけ。
リポジトリ作成
> fossil init hoge.repo project-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx server-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx admin-user: xxxxxx (initial password is "xxxxxx")
ユーザ ID は今ログインしてるユーザ、パスワードは初期のが何か自動生成される。このメッセージはパスワードも書かれているので一応保管しとく。余談だが .repo と拡張子付けないと作れない事に小ハマりしたw
リポジトリ作成時、他既存リポジトリから設定を引き継ぐ
リポジトリ作成後、毎回以降の設定するのも面倒だなと思ってちょっと調べたら 今更だが既存リポジトリから設定を引き継ぐオプションがあったのでメモ。
> fossil init --template other.repo hoge.repo
other.repo
に設定を引き継ぎたいリポジトリファイルの指定をする。
リポジトリ設定
UI 画面起動
> fossil ui c:\path\to\hoge.repo
要パス指定。自分の Windows7 環境だとコマンド叩いた後 Firefox で勝手に起動した。またこのコマンドは fossil によるローカル Web サーバが動くので別コマンドプロンプト立ち上げて動かしとくのが良さそう。
プロジェクト名設定
立ち上がると出てくる画面に Project Name 入れてくれと出るのでそれに従い setup/config でプロジェクト名を設定。leiningen で作ったプロジェクト名と同じにした。後は Project Description に軽く概要だけ書いて設定。他にも Wiki を WYSIWYG にするかどうかとか Wiki マークアップに HTML を使うかどうかの設定とかあるがそれは変えずにそのままとした。
ローカル時間に変更
Timeline 見ると、初っ端のリポジトリ作られました的なものがあるが、その時間が UTC だったので Admin -> Timeline -> Use UTC のチェックをオフに変更。
ファイル追加
無視ファイル指定
コマンドラインだと fossil settings ignore-glob を使うようだが、Web UI にも setting にあったのでそこで設定。
.gitignore, repl-port, *.class,*.dependencies
leiningen でソース管理外にするのはこれくらいかな。残念ながら ディレクトリ指定はできない模様。 ディレクトリ指定できれば target 以下を除外するとかもう少し簡単にできるんだがしょうがない。
リポジトリチェックアウト
trunk
> fossil open hoge.repo
最新のワーキングコピーをカレントフォルダに作るコマンドだが、全く新規の場合は当然何もない。また、後述のファイル追加後だと FOSSIL とか言うテンポラリファイルらしきものができる。
特定の branch をチェックアウト
> fossil open hoge.repo some-branch
some-branch
が branch 名になる。
ファイル追加
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 status
変更確定
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。
branch を切る
自分の目的は trunk はリリース用として現状維持しておきたいが、branch を切る事で trunk 影響を与えずに 実験的な変更や大きめの変更を行いたい時に使う。
trunk を open したワーキングディレクトリで、
fossil branch new new-branch-name basis
basis は trunk のどのバージョンで branch を切るか、new-branch-name が作成するブランチの名前になる。
切った branch 以降で作業したい場合は、trunk とは別のワーキングディレクトリを適当に作って
そこで fossil open
で new-branch-name を指定する。
ワークフロー
- チェックアウト fossil open c:\path\to\fossil.repo
- これもバッチ作って PATH が通った所に置いといて、1 日の開始にまずチェックアウトかける
- ゴリゴリコーディング
変更
- ファイル追加なら
add
- ファイル削除なら
rm
- 既に管理下にあるファイルの変更ならコミットまで特に何もする必要なく、こまめにファイル保存だけしとく
- 元に戻したければ
revert
- ファイル追加なら
そんでキリの良い所でコミット
他調べた事
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 直接叩けるっぽい
スキーマ確認は必要だが、内部 DBMS で sqlite 使ってる事もあり SQL 直接叩けるみたい。UI では見せてないような細かい情報もこれで取れるんじゃないかなとちょっと期待。Web UI だと何のチェックもしてないから十分注意してくれとあるが、使うにしても自分は SELECT しかやるつもりはないので多分大丈夫かな。