7
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

fossil 基本的な使い方

Last updated at Posted at 2021-05-12

fossilを使ったバージョン管理

repositoryの作成からファイルのコミット、Web UIの起動等をあっさりと。

環境

  • Windows 10
  • fossil 2.18

fossilは 一個のファイル fossil.exe だけで完結するので

本家サイトのダウンロードからファイルを落としてきて、
解凍してPATHの通った場所におくだけでも問題ないです。

Chocolateyが使える環境であれば 以下を管理者権限で実行してインストールでも良いです。

choco install -y fossil

バージョン確認するとこんな感じ

D:\nodework\> fossil version
This is fossil version 2.18 [84f25d7eb1] 2022-02-23 13:22:20 UTC

レポジトリの作成

hello_world.fossil というファイル名のレポジトリを作成します。

fossil new hello_world.fossil

fossilの repositoryは 単一のファイルです。commitされたソース・ファイル等は、
このファイルが生きていれば取り出す事が出来ます。

作業ディレクトリの作成・オープン

hello_world という作業ディレクトリを作成して、そこにrepositoryを開きます。

fossil open hello_world.fossil --workdir hello_world

現在のファイルの状態

./
 │ hello_world.fossil << repository
 └─hello_world/ << 作業ディレクトリ(local source treeとも呼ばれます)
     └─_FOSSIL_ << 作業ディレクトリが参照している repositoryへの path等が記録されているファイル

アプリケーション作成

なんでも良いのですが、ここでは管理対象のアプリケーションサンプルとして nodeの expressを使った Hello Worldです。
nodeのインストールは別途しておいてください。

ここから 作業ディレクトリのルート上で操作していきます。

cd hello_world

npmで initして expressを install

npm init -y
npm install express --save

この時点でこんな感じのファイルやフォルダが作られます。

./
│ hello_world.fossil
└─hello_world
    │ package-lock.json <<管理対象にしたいファイル
    │ package.json <<管理対象にしたいファイル
    │ _FOSSIL_
    └─node_modules <<管理対象に入れる必要の無いファイル郡

fossil extras: バージョン管理されていないファイルの確認

作業ディレクトリ配下で 新規に追加されたファイル=バージョン管理をしていないファイルを確認します。

fossil extras

実行すると express 関係のファイルが node_modules 以下にあって大量に出てしまうと思います。

D:\nodework\hello_world>fossil extras
node_modules/accepts/HISTORY.md
... たくさんのファイル ...
node_modules/vary/README.md
package-lock.json
package.json

node_modules 以下は管理する必要がないので、設定をして無視するようにします。

.fossil-settings/ignore-glob: バージョン管理から無視するファイル/フォルダの設定

gitの場合 .gitignore ファイルを書きますが、fossilの場合 2つ方法があります。

  • fossil settings ignore-glob コマンドで、レポジトリに対して無視するファイル名の規則を設定する
  • .fossil-settings/ignore-glob ファイルに無視するファイル名の規則を設定する

glob なので具体的な名前と ワイルドカード * と ? を使ってファイル郡を設定します。
ただ、fossilのglobは パス区切り文字も含めてワイルドカードがマッチする点がちょっと違います。

ここでは後者。設定ファイル .fossil-settings/ignore-glob を repository に追加して管理していくことにします。

.fossil-settings/ignore-glob
## 無視するファイル名
node_modules

ここで もう一度 fossil extras を実行すると今度は node_modules が無視されてぐっとファイル数が減ると思います。

D:\nodework\hello_world>fossil extras
package-lock.json
package.json

ただ、設定ファイルの .fossil-settings/ignore-glob ファイルも出てきません。

fossilはデフォルトで . (ドット) で始まるファイルは明示的に指定されない限り無視します。
このため、.fossil-settings/ignore-glob も無視されてしまったというわけです。

こういう時は --dotfiles オプションで 対象に含める事が出来ます。

D:\nodework\hello_world>fossil extras --dotfiles
.fossil-settings/ignore-glob
package-lock.json
package.json

ここで表示されたファイルは バージョン管理されていないので repositoryに追加して管理するようにします。

fossil add: バージョン管理対象の追加

まずは package.json をバージョン管理対象に含める様に指定します。

fossil add package.json

これで repository に追加する対象として package.json ファイルがマークされます。
この後 commit によりレポジトリ内に マークされたファイルが取り込まれます。

なお、git の staging とは違いますので、一度 addしてしまえば、変更する度に毎回 git add -u する必要はありません。

addremove: 作業ディレクトリに存在する新規ファイル/消えたファイルをまとめて登録削除

gitで言うと git add -A と同じ様な感じ。

extrasコマンドで管理対象に含められていないファイルの一覧がわかっていますし、全部管理対象にしておきたい場合は一つのコマンドでまとめて追加削除できます。ここでも --dotfiles を付ける事で ドットで始まるファイルも対象にできます。

fossil addremove
fossil addremove --dotfiles

いきなりやると余計なファイルが入ってしまう事もありますので、実際の変更を加えない dry-run (-n) オプションを指定して確認します。

fossil addremove --dotfiles -n

(dry-runでも同じ表示ですが) 実際にファイルを追加すると 以下のような表示がされます。

D:\nodework\hello_world>fossil addremove --dotfiles
ADDED  .fossil-settings/ignore-glob
ADDED  package-lock.json
ADDED  package.json
added 3 files, deleted 0 files

現状の バージョン管理対象としてはこれで良いので次に進みます。

status: 現在の作業ディレクトリの状況の確認

現在の作業ディレクトリで、ファイルの追加・削除・変更状況等を確認します。

fossil status

結果はこんな感じ。

D:\nodework\hello_world>fossil status
repository:   D:/nodework/hello_world.fossil
local-root:   D:/nodework/hello_world/
config-db:    C:/Users/yasuo/AppData/Local/_fossil
checkout:     d673096bb32cf540370edb48817f7e8d0c05046b 2021-05-11 07:38:18 UTC
tags:         trunk
comment:      initial empty check-in (user: yasuo)
ADDED      .fossil-settings/ignore-glob
ADDED      package-lock.json
ADDED      package.json

チェックアウトしたバージョンや 作業ディレクトリに入っている変更を確認出来ます。

commit: 変更を取り込む

fossil commit

この場合ファイル指定がないので変更全てを取り込みます。

変更した特定のファイルだけ commitしたい場合、 gitの場合 addで staging してから、commit しますが、fossilの場合は commit 時に取り込みたいファイルを指定する形になります。

例えば、package.json の変更だけを commitしたい場合は

fossil commit package.json

といった形です。

実行するとこんな形で新しいVersionが表示されます。

D:\nodework\hello_world>fossil commit -m "wip"
New_Version: 4bcc464539824bf123c7d8f7d1ced8c6ed9e32fe6c5366f70c23f19ee9740ee3

なお、commitしたときに 色々fossilはお節介をやいてきます。

  • commitのコメントが無いときはエディタ起動
  • 改行コードがDOS(CR/LF)のファイルを見つけたときは変換の確認(crlf-glob設定で無視可能)
  • テキストファイルの encodingが utf-8でも asciiでもないと判断された場合の確認(encoding-globで無視可能)
  • textファイル扱いだが binaryファイルのように思われるファイルの確認(binary-globで binaryファイルを明示可能)
  • commitすると forkしてしまうケースでの updateの推奨
  • remote repository(上流)との autosync (pull/push)実施

これらは settings や設定ファイル(binary-glob/crlf-glob等)で 動作を変えられます。

ui: Web UIの起動

作業ディレクトリで fossil ui を実行すると Web UIが起動します。

D:\nodework\hello_world>fossil ui
Temporary files: C:\Users\xxxxxx\AppData\Local\Temp\fossil_server_P8080*
Listening for HTTP requests on TCP port 8080
Launch webbrowser: start http://localhost:8080/timeline?c=current &
Type Ctrl-C to stop the HTTP server

Timelineが表示されるかと思います。

image.png

蛇足かと思いますが、黒系の画面なのは Ardoise の Skinを指定しているためです。
Skinは http://localhost:8080/setup_skin_adminにアクセスすると変更できます。
Admin → Skins に行くとカスタマイズ方法が出てくるのですが、ありもので簡単に切り替える場合は この方法で変えるのが楽かと思います。

なお、fossil serverで Fossilサーバを起動出来るのですが、UIと見た目が ほぼ同じです。
ただし下記が異なります1

  • UIは外部からの接続不可 - localhost(IPv4/IPv6)で Listen
  • UIはBrowserを自動的に起動
  • UIは現在のユーザ2でログインした状態で起動
  • UIはtimelineが表示される

作業PC上での作業の場合、サーバポートを開ける必要は無いと思いますので 通常は ui で起動すべきかと思います。

その他UI関連設定

ファイルをバージョン管理するだけなら、こんなもんで大体使い始められると思うのですが
ここら辺は設定したほうが良いかも?という点だけ紹介

プロジェクト名の設定

uiの Admin → Configurationを開いて 一番上 Project Nameを設定して Apply

プロジェクトホームページに表示する情報の設定

  1. プロジェクト名を設定
  2. uiの Wiki → New から プロジェクト名 の Wikiページを作る(Markup Styleは お好きに)

githubに慣れている方だと ルートにある README.mdを表示したい!と思うと思います。

その場合には

  1. README.md を addして commitする
  2. uiの Admin → Configuration の Index Page という項目を /home → /doc/tip/README.md と変更して Apply

最後に

こんな感じでfossilを使い始める事が出来るかと思います。
本当はTicketとかについても触ろうかと思いましたが、長くなるのでまた今度。

あ、expressの hello world忘れてた……

  1. これ以外にもあるかもしれません。 ui と server は ブラウザが自動起動するかしないかだけ!という解説も多いのですが、少なくともListenするサーバIPが異なる点はセキュリティ上意識したほうが良いと思います。

  2. 通常fossil new したときに setup ユーザとして、Windowsアカウントのユーザ名でユーザが自動作成されていると思います。

7
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?