「Fossil」の版間の差分

提供:senooken JP Wiki
(setup_config)
1行目: 1行目:
[[Category:IT]]
[[Category:IT]]
==About==


== About ==
===About===
 
*[https://gigazine.net/news/20231231-why-sqlite-does-not-use-git/ SQLiteがバージョン管理システムとしてGitを採用しない理由 - GIGAZINE]
=== About ===
*[https://gigazine.net/news/20201229-fossil/ GitとGitHubの機能をひとつのバイナリに詰め込んだ「Fossil」レビュー - GIGAZINE]
* [https://gigazine.net/news/20231231-why-sqlite-does-not-use-git/ SQLiteがバージョン管理システムとしてGitを採用しない理由 - GIGAZINE]
* [https://gigazine.net/news/20201229-fossil/ GitとGitHubの機能をひとつのバイナリに詰め込んだ「Fossil」レビュー - GIGAZINE]


外部依存を排除しており、CGIでも動作するという点が非常に良い。気になる。Phorgeの検討が不要になる。
外部依存を排除しており、CGIでも動作するという点が非常に良い。気になる。Phorgeの検討が不要になる。
25行目: 24行目:
</html>
</html>


=== Fossil Concepts ===
===Fossil Concepts===
[https://fossil-scm.org/home/doc/trunk/www/concepts.wiki Fossil: Fossil Concepts]
[https://fossil-scm.org/home/doc/trunk/www/concepts.wiki Fossil: Fossil Concepts]


=== Adding Features To Fossil ===
===Adding Features To Fossil===
[https://fossil-scm.org/home/doc/trunk/www/adding_code.wiki Fossil: Adding Features To Fossil]
[https://fossil-scm.org/home/doc/trunk/www/adding_code.wiki Fossil: Adding Features To Fossil]


=== Fossil Settings ===
===Fossil Settings===
[https://fossil-scm.org/home/doc/trunk/www/settings.wiki Fossil: Fossil Settings]
[https://fossil-scm.org/home/doc/trunk/www/settings.wiki Fossil: Fossil Settings]


fossil setingsかWeb UIの[Admin]-[Settings]からfossilの設定を変更できる。リポジトリー毎の設定。
fossil setingsかWeb UIの[Admin]-[Settings]からfossilの設定を変更できる。リポジトリー毎の設定。


=== Glossary ===
===Glossary===
[https://fossil-scm.org/home/doc/trunk/www/glossary.md Fossil: Glossary]
[https://fossil-scm.org/home/doc/trunk/www/glossary.md Fossil: Glossary]


コマンドという概念がある。fossilのコマンドの引数に指定するサブコマンド。これがWebバージョンもある。Web版の場合/commandのように、URLの最後に/をつける模様。
コマンドという概念がある。fossilのコマンドの引数に指定するサブコマンド。これがWebバージョンもある。Web版の場合/commandのように、URLの最後に/をつける模様。


== Install ==
==Install==


=== Binary ===
===Binary===
[https://fossil-scm.org/home/doc/trunk/www/index.wiki Fossil: A Coherent Software Configuration Management System]
[https://fossil-scm.org/home/doc/trunk/www/index.wiki Fossil: A Coherent Software Configuration Management System]


54行目: 53行目:
  ln -fns ../stow/fossil-$VER/fossil ../../bin/
  ln -fns ../stow/fossil-$VER/fossil ../../bin/


== Server ==
==Server==


=== How CGI Works In Fossil ===
===How CGI Works In Fossil===
[https://fossil-scm.org/home/doc/trunk/www/aboutcgi.wiki Fossil: How CGI Works In Fossil]
[https://fossil-scm.org/home/doc/trunk/www/aboutcgi.wiki Fossil: How CGI Works In Fossil]


=== How To Configure A Fossil Server ===
===How To Configure A Fossil Server===
[https://fossil-scm.org/home/doc/tip/www/server/ Fossil: How To Configure A Fossil Server]
[https://fossil-scm.org/home/doc/tip/www/server/ Fossil: How To Configure A Fossil Server]


Fosilをサーバーとして稼働させる場合、可能な方式がいくつかある。
Fosilをサーバーとして稼働させる場合、可能な方式がいくつかある。


* CGI
*CGI
* FastCGI: OpenBSDのみ。
*FastCGI: OpenBSDのみ。
* server: fossil server
*server: fossil server
* SCGI: fossil server実行時。
*SCGI: fossil server実行時。


共用サーバーの場合、ほぼCGIのみ。サーバーがOpenBSDならFastCGIもOK。パフォーマンス優先なら単独サーバーかSCGI。基本はCGIでいいと思う。リポジトリーだからそんなに頻繁にアクセス来ないと思う。
共用サーバーの場合、ほぼCGIのみ。サーバーがOpenBSDならFastCGIもOK。パフォーマンス優先なら単独サーバーかSCGI。基本はCGIでいいと思う。リポジトリーだからそんなに頻繁にアクセス来ないと思う。
75行目: 74行目:
fossilのweb uiではリポジトリーの新規作成ができない。新規作成だけはコマンドラインから行う必要がある。これだけがいまいち。
fossilのweb uiではリポジトリーの新規作成ができない。新規作成だけはコマンドラインから行う必要がある。これだけがいまいち。


=== CGI ===
===CGI===
[https://fossil-scm.org/home/doc/tip/www/server/any/cgi.md Fossil: Serving via CGI]
[https://fossil-scm.org/home/doc/tip/www/server/any/cgi.md Fossil: Serving via CGI]


99行目: 98行目:
これで <nowiki>[http://mydomain.org/fossil/repoX]</nowiki> でアクセスする感じになる。これがいい。こういう方式にしておくと、既存のサイトにfossilを配置するだけでfossilのホストも可能になる。
これで <nowiki>[http://mydomain.org/fossil/repoX]</nowiki> でアクセスする感じになる。これがいい。こういう方式にしておくと、既存のサイトにfossilを配置するだけでfossilのホストも可能になる。


=== Configure ===
===Configure===
[https://fossil-scm.org/home/doc/tip/www/cgi.wiki Fossil: CGI Script Configuration Options]
[https://fossil-scm.org/home/doc/tip/www/cgi.wiki Fossil: CGI Script Configuration Options]


127行目: 126行目:
サブディレクトリーを再帰して、*.fossilを表示するが以下の例外がある。
サブディレクトリーを再帰して、*.fossilを表示するが以下の例外がある。


* .で始まるファイルは隠しファイル扱いでスキップ。
*.で始まるファイルは隠しファイル扱いでスキップ。
* .fossilのベース名と同じディレクトリーがある場合、リストは表示されるがリンクにはならない。例えば、XYZとXYZ.fossilが同じ階層にある場合。大文字・小文字無視。この場合、ベース名の異なるディレクトリーに移動させる。
*.fossilのベース名と同じディレクトリーがある場合、リストは表示されるがリンクにはならない。例えば、XYZとXYZ.fossilが同じ階層にある場合。大文字・小文字無視。この場合、ベース名の異なるディレクトリーに移動させる。
|-
|-
|
|
192行目: 191行目:
repolistはディレクトリー単位の表示はできず、dirにアクセスするとnotfoundになる。notfoundで/か/fossilの一覧ページを指定したほうがよさそう。
repolistはディレクトリー単位の表示はできず、dirにアクセスするとnotfoundになる。notfoundで/か/fossilの一覧ページを指定したほうがよさそう。


== Usage ==
==Usage==


=== Quick ===
===Quick===
[https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki Fossil: Fossil Quick Start Guide]
[https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki Fossil: Fossil Quick Start Guide]


プロジェクトの基本作業。
プロジェクトの基本作業。


==== Starting A New Project ====
====Starting A New Project====
以下のコマンドで空のfossilリポジトリーを作成する。
以下のコマンドで空のfossilリポジトリーを作成する。
  fossil init repository-filename
  fossil init repository-filename
215行目: 214行目:
  fossil user password <username> [<password>]
  fossil user password <username> [<password>]


==== Checking Out A Local Tree ====
====Checking Out A Local Tree====
まず、ツリーのルートとなるディレクトリーを作成して、fossil openでDBからローカルコピーをチェックアウトする。
まず、ツリーのルートとなるディレクトリーを作成して、fossil openでDBからローカルコピーをチェックアウトする。
  fossil open ../myclone.fossil
  fossil open ../myclone.fossil
231行目: 230行目:
updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。
updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。


==== Making and Committing Changes ====
====Making and Committing Changes====
以下のコマンドでファイルの追加・削除ができる。
以下のコマンドでファイルの追加・削除ができる。
  fossil add file...
  fossil add file...
257行目: 256行目:
リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。
リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。


==== Branching And Merging ====
====Branching And Merging====
新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。
新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。


269行目: 268行目:
redoもある。
redoもある。


=== Branching, Forking, Merging, and Tagging ===
===Branching, Forking, Merging, and Tagging===
[https://fossil-scm.org/home/doc/trunk/www/branching.wiki Fossil: Branching, Forking, Merging, and Tagging]
[https://fossil-scm.org/home/doc/trunk/www/branching.wiki Fossil: Branching, Forking, Merging, and Tagging]


292行目: 291行目:
自動的に検知してくれる。
自動的に検知してくれる。


=== Get ===
===Get===
基本的な使用方法
基本的な使用方法
  # clone
  # clone
304行目: 303行目:
上記コマンドでファイルを取得する。Fossilは1ファイルで管理するので、cloneだと取得しきれない可能性がある。中断した場合などはsyncで再取得する。再取得後、反映されない場合、rebuildで取得データからDBを再構築する。
上記コマンドでファイルを取得する。Fossilは1ファイルで管理するので、cloneだと取得しきれない可能性がある。中断した場合などはsyncで再取得する。再取得後、反映されない場合、rebuildで取得データからDBを再構築する。


=== Empty ===
===Empty===
fossilをcloneすると空で、Web UIで [cannot resolve name: trunk] と表示されることがある。これは、リポジトリーのクローンが失敗している。
fossilをcloneすると空で、Web UIで [cannot resolve name: trunk] と表示されることがある。これは、リポジトリーのクローンが失敗している。


313行目: 312行目:
これで解決した。
これで解決した。


=== Import And Export ===
===Import And Export===
情報源=[https://fossil-scm.org/home/doc/trunk/www/inout.wiki Fossil: Import And Export]
情報源=[https://fossil-scm.org/home/doc/trunk/www/inout.wiki Fossil: Import And Export]


FossilにはGitのインポート・エクスポート機能がある。Gitに他のVCSのインポート・エクスポート機能があるので、Gitを経由して他のいろんなVCSをfossilとインポート・エクスポート可能。
FossilにはGitのインポート・エクスポート機能がある。Gitに他のVCSのインポート・エクスポート機能があるので、Gitを経由して他のいろんなVCSをfossilとインポート・エクスポート可能。


==== Git → Fossil ====
====Git → Fossil====
以下のコマンドでインポート・取り込める。
以下のコマンドでインポート・取り込める。
  cd git-repo
  cd git-repo
326行目: 325行目:
--gitを指定しているが、実際は不要。なぜなら、Fossilが対応している他のリポジトリーはgitだけだから。ただし、将来的に他のリポジトリーにも対応するかもしれないので、互換性のために一応--gitを指定しておく。
--gitを指定しているが、実際は不要。なぜなら、Fossilが対応している他のリポジトリーはgitだけだから。ただし、将来的に他のリポジトリーにも対応するかもしれないので、互換性のために一応--gitを指定しておく。


==== Fossil → Git ====
====Fossil → Git====
Fossilリポジトリーのgitへの変換は以下のコマンド。
Fossilリポジトリーのgitへの変換は以下のコマンド。
  git init new-repo
  git init new-repo
332行目: 331行目:
  fossil export --git ../repo.fossil | git fast-import
  fossil export --git ../repo.fossil | git fast-import


==== Mirror A Fossil Repository In Git ====
====Mirror A Fossil Repository In Git====
Fossil v2.9からFossilリポジトリーのgitまたはGitHubへのミラーリングに対応している。Fossilは元々自己ホスト可能だが、この機能でGitHubでのホストも可能になる。
Fossil v2.9からFossilリポジトリーのgitまたはGitHubへのミラーリングに対応している。Fossilは元々自己ホスト可能だが、この機能でGitHubでのホストも可能になる。


==== Bidirectional Synchronization ====
====Bidirectional Synchronization====
Gitとの同期機能もある。マークファイルを使用して行う。
Gitとの同期機能もある。マークファイルを使用して行う。


368行目: 367行目:
わかりにくいからあまりしたくない。
わかりにくいからあまりしたくない。


==== インポートの再開 ====
====インポートの再開====
https://chatgpt.com/c/676fb751-f140-800b-b27b-22d683926e3e
https://chatgpt.com/c/676fb751-f140-800b-b27b-22d683926e3e


インポートが途中で中断された場合。ややこしい。fossil importは1回のコマンドで完了する設計になっているから。途中から再開する機能は直接はない。工夫が必要。
インポートが途中で中断された場合。ややこしい。fossil importは1回のコマンドで完了する設計になっているから。途中から再開する機能は直接はない。工夫が必要。


# gitリポジトリー側のコミットログをフィルターして必要な部分だけ残す。
#gitリポジトリー側のコミットログをフィルターして必要な部分だけ残す。
# fossilに一部インポート済みの場合、インポート後の履歴をformat-patchでファイルに出力して、それをfossil patch applyで取り込む。
#fossilに一部インポート済みの場合、インポート後の履歴をformat-patchでファイルに出力して、それをfossil patch applyで取り込む。
# 何回かに分けて、fossilのリポジトリーにインポート後、fossilのマージ機能で1個のfossilリポジトリーにマージ。
#何回かに分けて、fossilのリポジトリーにインポート後、fossilのマージ機能で1個のfossilリポジトリーにマージ。


はっきりいって面倒だから、ローカルPCで履歴を全部取得して、fossilに取り込んで、取り込んだDBを転送した方が確実。
はっきりいって面倒だから、ローカルPCで履歴を全部取得して、fossilに取り込んで、取り込んだDBを転送した方が確実。


=== Git to Fossil Translation Guide ===
===Git to Fossil Translation Guide===
[https://fossil-scm.org/home/doc/trunk/www/gitusers.md Fossil: Git to Fossil Translation Guide]
[https://fossil-scm.org/home/doc/trunk/www/gitusers.md Fossil: Git to Fossil Translation Guide]


==== Repositories and Checkouts Are Distinct ====
====Repositories and Checkouts Are Distinct====
Fossilではリポジトリーとチェックアウトは明確に区別されている。gitの場合、.gitのあるディレクトリーで管理しているので、複数のチェックアウトを展開できない。
Fossilではリポジトリーとチェックアウトは明確に区別されている。gitの場合、.gitのあるディレクトリーで管理しているので、複数のチェックアウトを展開できない。


== Help ==
==Help==
[[https://fossil-scm.org/home/help Fossil: Help]] にFossilのコマンド、Web UIページ、設定が一覧されている。
[[https://fossil-scm.org/home/help Fossil: Help]] にFossilのコマンド、Web UIページ、設定が一覧されている。


数が多いので特に重要なものを整理する。
数が多いので特に重要なものを整理する。


=== Available web UI pages: ===
===Available web UI pages:===
FossilのWeb UIページ。リポジトリーに対して/<page>の形式でアクセスする。ページ毎に?のクエリーパラメーターを受け付けるものがある。
FossilのWeb UIページ。リポジトリーに対して/<page>の形式でアクセスする。ページ毎に?のクエリーパラメーターを受け付けるものがある。


==== artifact file whatis ====
====artifact file whatis====


* [https://fossil-scm.org/home/help?cmd=/artifact Fossil: Help: /artifact]
*[https://fossil-scm.org/home/help?cmd=/artifact Fossil: Help: /artifact]
* [https://fossil-scm.org/home/help?cmd=/file Fossil: Help: /file]
*[https://fossil-scm.org/home/help?cmd=/file Fossil: Help: /file]
* [https://fossil-scm.org/home/help?cmd=/whatis Fossil: Help: /whatis]
*[https://fossil-scm.org/home/help?cmd=/whatis Fossil: Help: /whatis]


fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。?txtを指定することでfossilのレンダーリングなしでtxtで表示する。
fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。?txtを指定することでfossilのレンダーリングなしでtxtで表示する。


==== download ====
====download====
[https://fossil-scm.org/home/help?cmd=/download Fossil: Help: /download]
[https://fossil-scm.org/home/help?cmd=/download Fossil: Help: /download]


最新ソースのtar玉とZIP提供の簡単なダウンロードページを提供する。
最新ソースのtar玉とZIP提供の簡単なダウンロードページを提供する。


==== home index not_found ====
====home index not_found====


* [https://fossil-scm.org/home/help?cmd=/home Fossil: Help: /home]
*[https://fossil-scm.org/home/help?cmd=/home Fossil: Help: /home]


setup_configで指定したホームページにリダイレクトするスタブページ。
setup_configで指定したホームページにリダイレクトするスタブページ。


==== uv ====
====uv====
[https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv]
[https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv]


バージョン管理していないファイルを表示する。
バージョン管理していないファイルを表示する。


==== sqlar tarball zip ====
====sqlar tarball zip====


* [https://fossil-scm.org/home/help?cmd=/sqlar Fossil: Help: /sqlar]
*[https://fossil-scm.org/home/help?cmd=/sqlar Fossil: Help: /sqlar]
* [https://fossil-scm.org/home/help?cmd=/tarball Fossil: Help: /tarball]
*[https://fossil-scm.org/home/help?cmd=/tarball Fossil: Help: /tarball]
* [https://fossil-scm.org/home/help?cmd=/zip Fossil: Help: /zip]
*[https://fossil-scm.org/home/help?cmd=/zip Fossil: Help: /zip]


指定したチェックインの該当アーカイブファイルを応答する。
指定したチェックインの該当アーカイブファイルを応答する。


==== setup ====
====setup====


===== setup_config =====
=====setup_config=====
[https://fossil-scm.org/home/help?cmd=/setup_config Fossil: Help: /setup_config]
[https://fossil-scm.org/home/help?cmd=/setup_config Fossil: Help: /setup_config]


Admin/Configurationページ。プロジェクト名などを設定できる。Homeの初回アクセス時に表示される。
Admin/Configurationページ。プロジェクト名などを設定できる。Homeの初回アクセス時に表示される。
== Web ==
* [https://www.fossil-scm.org/home/doc/trunk/www/webui.wiki Fossil: The Fossil Web Interface]
FossilのWeb UI自体のマニュアルはない模様。画面内の説明で完結している模様。自分で使いながら整理する。
=== Home ===
/home にアクセスすると、初回は以下のように表示される。
[[ファイル:Fossil unnamed first home.jpg]]<blockquote>Home
This is a stub home-page for the project. To fill in this page, first go to setup/config and establish a "Project Name". Then create a wiki page with that name. The content of that wiki page will be displayed in place of this message.</blockquote>また、サイトタイトルが [Unnamed Fossil Project] となっており見栄えが少々悪い。
setup_config (https://fossil.gnusocial.jp/fossil/gnusocial/setup_config) にアクセスして、Project Nameなどを入力する必要がある。


[[ファイル:Fossil.gnusocial.jp fossil gnusocial setup config.png]]
[[ファイル:Fossil.gnusocial.jp fossil gnusocial setup config.png]]
476行目: 461行目:
|tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。
|tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。
|-
|-
|Download Tag  
|Download Tag
|download-tag
|download-tag
|trunk
|trunk
487行目: 472行目:
|-
|-
|Main Menu
|Main Menu
|mainmenu
|
|
|
|Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。
|Web UIのメインメニューの項目。
 
# メニュー表示用テキスト。
# クリック時のハイパーリンク。/開始はリポジトリールート。
# TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。
# メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示できる。
 
初期値は以下。
Home      /home        *              {}
Timeline  /timeline    {o r j}        {}
Files    /dir?ci=tip  oh            desktoponly
Branches  /brlist      o              wideonly
Tags      /taglist    o              wideonly
Forum    /forum      {@2 3 4 5 6}  wideonly
Chat      /chat        C              wideonly
Tickets  /ticket      r              wideonly
Wiki      /wiki        j              wideonly
Admin    /setup      {a s}          desktoponly
Logout    /logout      L              wideonly
Login    /login      !L            wideonly
capexprの詳細 ([https://fossil-scm.org/home/doc/trunk/www/th1.md#capexpr Fossil: TH1 Scripts])。権限を意味する文字列 ([https://fossil-scm.org/home/doc/trunk/www/caps/ref.html Fossil: User Capability Reference])。
 
Download /download * {}などでダウンロードページでいいと思う。
|-
|-
|Custom Sitemap Entries
|Custom Sitemap Entries
500行目: 507行目:
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。


==== Empty Page ====
==Web==
 
*[https://www.fossil-scm.org/home/doc/trunk/www/webui.wiki Fossil: The Fossil Web Interface]
 
FossilのWeb UI自体のマニュアルはない模様。画面内の説明で完結している模様。自分で使いながら整理する。
 
===Home===
/home にアクセスすると、初回は以下のように表示される。
[[ファイル:Fossil unnamed first home.jpg]]<blockquote>Home
 
This is a stub home-page for the project. To fill in this page, first go to setup/config and establish a "Project Name". Then create a wiki page with that name. The content of that wiki page will be displayed in place of this message.</blockquote>また、サイトタイトルが [Unnamed Fossil Project] となっており見栄えが少々悪い。
 
setup_config (https://fossil.gnusocial.jp/fossil/gnusocial/setup_config) にアクセスして、Project Nameなどを入力する必要がある。
 
====Empty Page====
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919


508行目: 529行目:


設定が必要な模様。
設定が必要な模様。
'''解決方法''':
'''解決方法''':


# Webインターフェースでログインし、<code>/Setup</code> ページにアクセスします。
#Webインターフェースでログインし、<code>/Setup</code> ページにアクセスします。
# 「Start Page」を設定します:
#「Start Page」を設定します:
#* 「Start Page」に表示したいWikiページの名前を指定します(例:<code>Home</code>)。
#*「Start Page」に表示したいWikiページの名前を指定します(例:<code>Home</code>)。
#* Wikiページがまだない場合は、Wikiを作成してください。
#*Wikiページがまだない場合は、Wikiを作成してください。


'''Wikiページの作成方法''':
'''Wikiページの作成方法''':


# <code>/wiki</code> ページにアクセス。
#<code>/wiki</code> ページにアクセス。
# 「新しいWikiページを作成」ボタンをクリック。
#「新しいWikiページを作成」ボタンをクリック。
# ページ名(例:<code>Home</code>)と内容を入力し、保存します。
#ページ名(例:<code>Home</code>)と内容を入力し、保存します。


ただ、このWikiページの作成はちょっと考えたほうがいい。
ただ、このWikiページの作成はちょっと考えたほうがいい。
525行目: 547行目:
リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。
リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。


=== Permission ===
===Permission===


* [https://www.fossil-scm.org/home/doc/trunk/www/caps/admin-v-setup.md Fossil: Differences Between Setup and Admin Users]
*[https://www.fossil-scm.org/home/doc/trunk/www/caps/admin-v-setup.md Fossil: Differences Between Setup and Admin Users]
* [https://www.fossil-scm.org/home/doc/trunk/www/caps/ Fossil: Administering User Capabilities (a.k.a. Permissions)]
*[https://www.fossil-scm.org/home/doc/trunk/www/caps/ Fossil: Administering User Capabilities (a.k.a. Permissions)]
* [https://fossil-scm.org/home/help?cmd=user Fossil: Help: user]
*[https://fossil-scm.org/home/help?cmd=user Fossil: Help: user]


Fossilのユーザー管理機能は権限管理機能と同じ意味。
Fossilのユーザー管理機能は権限管理機能と同じ意味。


==== Password ====
====Password====
Fossilのユーザーは、リポジトリーの作成時 (fossil init/fossil import) 時に作成される。
Fossilのユーザーは、リポジトリーの作成時 (fossil init/fossil import) 時に作成される。
  fossil init repository-filename
  fossil init repository-filename
542行目: 564行目:
プロジェクトの初期ユーザー名とパスワードが表示される。ユーザー名はOSのユーザー名がデフォルト。オプションで変更可能。
プロジェクトの初期ユーザー名とパスワードが表示される。ユーザー名はOSのユーザー名がデフォルト。オプションで変更可能。


==== Password reset ====
====Password reset====
プロジェクト作成時のパスワード表示を見逃したり、忘れた場合は、fossil userコマンドで再設定可能 ([https://fossil-scm.org/home/help?cmd=user Fossil: Help: user])。
プロジェクト作成時のパスワード表示を見逃したり、忘れた場合は、fossil userコマンドで再設定可能 ([https://fossil-scm.org/home/help?cmd=user Fossil: Help: user])。
  fossil user list
  fossil user list
548行目: 570行目:
  fossil user password <username> [<password>]
  fossil user password <username> [<password>]


==== ユーザー名の変更 ====
====ユーザー名の変更====
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919


560行目: 582行目:
  fossil user capabilities 新しいユーザー名 権限
  fossil user capabilities 新しいユーザー名 権限


==== Password skip ====
====Password skip====
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919


567行目: 589行目:
パスワードなしでのログインを実現したい場合、いくつかの方法がある。
パスワードなしでのログインを実現したい場合、いくつかの方法がある。


# HTTP Basic認証
#HTTP Basic認証
# SSH鍵認証: ssh鍵でcloneしたらパスワード不要。
#SSH鍵認証: ssh鍵でcloneしたらパスワード不要。
# Web UIでpublicアクセスを設定: Web UIの/setupに移動し、anonymouseかnobodyユーザーに権限を付与。
#Web UIでpublicアクセスを設定: Web UIの/setupに移動し、anonymouseかnobodyユーザーに権限を付与。
# 自動ログインCookie
#自動ログインCookie


=== Wiki ===
===Wiki===


==== Wiki in Fossil ====
====Wiki in Fossil====


* [https://www.fossil-scm.org/home/doc/trunk/www/wikitheory.wiki Fossil: Wiki In Fossil]
*[https://www.fossil-scm.org/home/doc/trunk/www/wikitheory.wiki Fossil: Wiki In Fossil]


Fossilは、様々な用途でFossil wikiやMarkdownを使用する。
Fossilは、様々な用途でFossil wikiやMarkdownを使用する。


* 単独Wiki: 各wikiページには、チェックインとは独立した独自の変更履歴がある。
*単独Wiki: 各wikiページには、チェックインとは独立した独自の変更履歴がある。
* .wiki/.md/markdownの拡張子の埋め込みドキュメントファイル: ソースツリー内の.wiki/.md/.markdown拡張子のファイルは、Fossilサーバーへの特別なURLでアクセス・表示可能。プロジェクトドキュメントをソースツリーに保存しながらオンラインアクセス可能。
*.wiki/.md/markdownの拡張子の埋め込みドキュメントファイル: ソースツリー内の.wiki/.md/.markdown拡張子のファイルは、Fossilサーバーへの特別なURLでアクセス・表示可能。プロジェクトドキュメントをソースツリーに保存しながらオンラインアクセス可能。
* バグレポートの説明・コメント/フォーラムメッセージ/チェックインコメント (fossil-wikiのみ)
*バグレポートの説明・コメント/フォーラムメッセージ/チェックインコメント (fossil-wikiのみ)
* 技術ノート
*技術ノート
* チェックインとブランチのメモ: branch/<branch name> または checkin/<hash> の単独wikiページは、対応するブランチチェックインに関連づけられており、タイムラインと情報画面のaboutセクションに表示される。歴史的なメモの記録に役立つ。
*チェックインとブランチのメモ: branch/<branch name> または checkin/<hash> の単独wikiページは、対応するブランチチェックインに関連づけられており、タイムラインと情報画面のaboutセクションに表示される。歴史的なメモの記録に役立つ。


==== Project Documentation ====
====Project Documentation====


* [https://www.fossil-scm.org/home/doc/trunk/www/embeddeddoc.wiki Fossil: Project Documentation]
*[https://www.fossil-scm.org/home/doc/trunk/www/embeddeddoc.wiki Fossil: Project Documentation]


単独wikiの他に埋め込みドキュメントがある。埋め込み文書はソースツリー内の文書をWebページとして表示する機能。埋め込み文書には以下の利点がある。
単独wikiの他に埋め込みドキュメントがある。埋め込み文書はソースツリー内の文書をWebページとして表示する機能。埋め込み文書には以下の利点がある。


* ソースコードと一緒にバージョン管理されるため、バージョンとドキュメントの対応が明確。
*ソースコードと一緒にバージョン管理されるため、バージョンとドキュメントの対応が明確。
* 任意のテキストエディターで編集可能。
*任意のテキストエディターで編集可能。
* 権限保有者のみ変更可能 (利点にも欠点にもなる)。
*権限保有者のみ変更可能 (利点にも欠点にもなる)。


===== 1.0 Fossil Support For Embedded Documentation =====
=====1.0 Fossil Support For Embedded Documentation=====
Web UIでは/docページを使用した埋め込みドキュメントに対応している。埋め込みドキュメントのアクセスは、Webブラウザーで次の形式のURLを指定する。
Web UIでは/docページを使用した埋め込みドキュメントに対応している。埋め込みドキュメントのアクセスは、Webブラウザーで次の形式のURLを指定する。
  <base url> /doc/ <version> / <file name>
  <base url> /doc/ <version> / <file name>


* <base url>: fossil webサーバーへのアクセスのメインURL。例えば、https://fossil-scm.org/home (CGIファイルへのパス相当)。
*<base url>: fossil webサーバーへのアクセスのメインURL。例えば、https://fossil-scm.org/home (CGIファイルへのパス相当)。
* <version>: 埋め込み文書を含むチェックイン の名前。ハッシュ、ブランチ、タグ、タイムスタンプなど。特別な識別子の [ckout] にもできる。これはチェックインではなく、ローカルソースツリーのファイルを意味する。/doc/ckout URLはコミット前のプレビューの表示が目的。このプレビューは重要。コミット前に表示結果を必ず確認する。fossil uiには--ckout-alias <name> オプションがあり <name> をckoutの別名にできる。例えば、/doc/trunkをfossil ui --ckout-alias trunkでプレビュー表示できる。
*<version>: 埋め込み文書を含むチェックイン の名前。ハッシュ、ブランチ、タグ、タイムスタンプなど。特別な識別子の [ckout] にもできる。これはチェックインではなく、ローカルソースツリーのファイルを意味する。/doc/ckout URLはコミット前のプレビューの表示が目的。このプレビューは重要。コミット前に表示結果を必ず確認する。fossil uiには--ckout-alias <name> オプションがあり <name> をckoutの別名にできる。例えば、/doc/trunkをfossil ui --ckout-alias trunkでプレビュー表示できる。
* <file name>: ソースツリーのルートを基準とした文書パス。MIMEタイプは拡張子で決まる。.css/.gif/html/.jpg/.png/txtなどを認識する ([https://www.fossil-scm.org/home/mimetype_list Fossil: Mimetype List])。.wiki/.md/.markdown/.txtには、標準のfossilヘッダーとフッターが追加された状態でレンダリングされる。それら以外は、そのままWebブラウザーに直接配信される。
*<file name>: ソースツリーのルートを基準とした文書パス。MIMEタイプは拡張子で決まる。.css/.gif/html/.jpg/.png/txtなどを認識する ([https://www.fossil-scm.org/home/mimetype_list Fossil: Mimetype List])。.wiki/.md/.markdown/.txtには、標準のfossilヘッダーとフッターが追加された状態でレンダリングされる。それら以外は、そのままWebブラウザーに直接配信される。


====== 1.1 HTML Rendering With Fossil Headers And Footers ======
======1.1 HTML Rendering With Fossil Headers And Footers======
拡張子が.html/.htmのファイルは、直接Webブラウザーに表示される。ただし、以下のdiv要素で始まる場合、Fossilヘッダーとフッターが追加されてから表示される。
拡張子が.html/.htmのファイルは、直接Webブラウザーに表示される。ただし、以下のdiv要素で始まる場合、Fossilヘッダーとフッターが追加されてから表示される。
  <nowiki><div class='fossil-doc' data-title='Title Text'></nowiki>
  <nowiki><div class='fossil-doc' data-title='Title Text'></nowiki>
class='fossil-doc'が必要。data-titleはオプションで、Fossilヘッダーに表示されるタイトルになる。以下が例。
class='fossil-doc'が必要。data-titleはオプションで、Fossilヘッダーに表示されるタイトルになる。以下が例。


* [https://www.fossil-scm.org/home/file/www/permutedindex.html?txt source text for www/permutedindex.html]
*[https://www.fossil-scm.org/home/file/www/permutedindex.html?txt source text for www/permutedindex.html]
* [https://www.fossil-scm.org/home/doc/trunk/www/permutedindex.html www/permutedindex.html rendered as HTML]
*[https://www.fossil-scm.org/home/doc/trunk/www/permutedindex.html www/permutedindex.html rendered as HTML]


なお、この方法で表示するHTMLは完全に独立しているわけではない。例えば、script要素はFossilのCSP (Content Security Poicy) の影響を受ける。詳細は「[https://www.fossil-scm.org/home/doc/trunk/www/customskin.md#headfoot Fossil: Skinning the Fossil Web Interface - Header and Footer Processing]」と「[https://www.fossil-scm.org/home/doc/trunk/www/defcsp.md Fossil: The Default Content Security Policy (CSP)]」にある。
なお、この方法で表示するHTMLは完全に独立しているわけではない。例えば、script要素はFossilのCSP (Content Security Poicy) の影響を受ける。詳細は「[https://www.fossil-scm.org/home/doc/trunk/www/customskin.md#headfoot Fossil: Skinning the Fossil Web Interface - Header and Footer Processing]」と「[https://www.fossil-scm.org/home/doc/trunk/www/defcsp.md Fossil: The Default Content Security Policy (CSP)]」にある。


===== 2.0 Server-Side Text Substitution =====
=====2.0 Server-Side Text Substitution=====


====== 2.1 "$ROOT" In HTML and Markdown Hyperlinks ======
======2.1 "$ROOT" In HTML and Markdown Hyperlinks======


====== 2.2 "$CURRENT" In "/doc/" Hyperlinks ======
======2.2 "$CURRENT" In "/doc/" Hyperlinks======


====== 2.3 TH1 Documents ======
======2.3 TH1 Documents======


===== 3.0 Examples =====
=====3.0 Examples=====


==== Wiki Formatting Rules ====
====Wiki Formatting Rules====
[https://www.fossil-scm.org/home/wiki_rules Fossil: Wiki Formatting Rules]
[https://www.fossil-scm.org/home/wiki_rules Fossil: Wiki Formatting Rules]


[https://www.fossil-scm.org/home/md_rules Fossil: Markdown Formatting Rules]
[https://www.fossil-scm.org/home/md_rules Fossil: Markdown Formatting Rules]


==== TH1 Scripts ====
====TH1 Scripts====
[https://www.fossil-scm.org/home/doc/trunk/www/th1.md Fossil: TH1 Scripts]
[https://www.fossil-scm.org/home/doc/trunk/www/th1.md Fossil: TH1 Scripts]


=== Content ===
===Content===


==== How The Fossil Download Page Works ====
====How The Fossil Download Page Works====


* [https://fossil-scm.org/home/doc/trunk/www/aboutdownload.wiki Fossil: How The Fossil Download Page Works]
*[https://fossil-scm.org/home/doc/trunk/www/aboutdownload.wiki Fossil: How The Fossil Download Page Works]
* [https://fossil-scm.org/home/help?cmd=/download Fossil: Help: /download]
*[https://fossil-scm.org/home/help?cmd=/download Fossil: Help: /download]


FossilのDownload ([https://fossil-scm.org/home/uv/download.html Fossil: Downloads]) ページの仕組み。デフォルトではこのページはない。
FossilのDownload ([https://fossil-scm.org/home/uv/download.html Fossil: Downloads]) ページの仕組み。デフォルトではこのページはない。
645行目: 667行目:
以下の手順で行う。
以下の手順で行う。


# download.jsに新しいリリース用の情報を記入して、新しいバージョン番号を認識できるようにする。
#download.jsに新しいリリース用の情報を記入して、新しいバージョン番号を認識できるようにする。
# fossil uv addで配布用バイナリーを追加。
#fossil uv addで配布用バイナリーを追加。
# fossil uv syncでpush
#fossil uv syncでpush


権限を持つユーザーのpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。
権限を持つユーザーのpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。


==== Unversioned Content ====
====Unversioned Content====


* [https://fossil-scm.org/home/doc/trunk/www/unvers.wiki Fossil: Unversioned Content]
*[https://fossil-scm.org/home/doc/trunk/www/unvers.wiki Fossil: Unversioned Content]
* [https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv]
*[https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv]


==== Image Format vs Fossil Repo Size ====
====Image Format vs Fossil Repo Size====
[https://fossil-scm.org/home/doc/trunk/www/image-format-vs-repo-size.md Fossil: Image Format vs Fossil Repo Size]
[https://fossil-scm.org/home/doc/trunk/www/image-format-vs-repo-size.md Fossil: Image Format vs Fossil Repo Size]

2025年1月2日 (木) 08:06時点における版

About

About

外部依存を排除しており、CGIでも動作するという点が非常に良い。気になる。Phorgeの検討が不要になる。

Fossil: A Coherent Software Configuration Management System

いくつか癖があるので注意する。

https://chatgpt.com/c/674e38de-a8c0-800b-8991-e0d68a2f0d86

複数のリポジトリーを取り扱うことは可能。ただし、Web UI上からリポジトリーの新規作成はできない。リポジトリーの新規作成はあくまでコマンドラインから行う必要がある。ここは集中的。

git と fossil の比較 git vs fossil-scm | タイトル

完全に個人なら悪くないが、コマンドの操作体系も異なるし、ややリスクがある。Tracのほうが無難。

Fossil Concepts

Fossil: Fossil Concepts

Adding Features To Fossil

Fossil: Adding Features To Fossil

Fossil Settings

Fossil: Fossil Settings

fossil setingsかWeb UIの[Admin]-[Settings]からfossilの設定を変更できる。リポジトリー毎の設定。

Glossary

Fossil: Glossary

コマンドという概念がある。fossilのコマンドの引数に指定するサブコマンド。これがWebバージョンもある。Web版の場合/commandのように、URLの最後に/をつける模様。

Install

Binary

Fossil: A Coherent Software Configuration Management System

ソースコードからコンパイルするか、コンパイル済みバイナリーを配置するだけ。

VER=2.25
mkdir -p ~/.local/stow/fossil-$VER ~/.local/bin
cd ~/.local/stow/fossil-$VER
curl -O https://fossil-scm.org/home/uv/fossil-linux-x64-$VER.tar.gz
tar -xf fossil-$VER.*
ln -fns ../stow/fossil-$VER/fossil ../../bin/

Server

How CGI Works In Fossil

Fossil: How CGI Works In Fossil

How To Configure A Fossil Server

Fossil: How To Configure A Fossil Server

Fosilをサーバーとして稼働させる場合、可能な方式がいくつかある。

  • CGI
  • FastCGI: OpenBSDのみ。
  • server: fossil server
  • SCGI: fossil server実行時。

共用サーバーの場合、ほぼCGIのみ。サーバーがOpenBSDならFastCGIもOK。パフォーマンス優先なら単独サーバーかSCGI。基本はCGIでいいと思う。リポジトリーだからそんなに頻繁にアクセス来ないと思う。

https://chatgpt.com/c/674e38de-a8c0-800b-8991-e0d68a2f0d86

fossilのweb uiではリポジトリーの新規作成ができない。新規作成だけはコマンドラインから行う必要がある。これだけがいまいち。

CGI

Fossil: Serving via CGI

CGIで実行するにはいくつか手順がある。

CGIディレクトリーに以下の内容のCGIスクリプトを用意する。

#!/usr/bin/fossil
repository: /home/fossil/repo.fossil

1行目のシバン部分をインストールしたfossilの絶対パスにする。

repositoryの部分は指定方法がいろいろある。単一リポジトリーのホストなら上記でいいが、複数のリポジトリーを取り扱いたければ、リポジトリー群の格納ディレクトリーをdirectory: で指定する。

また、リポジトリーが不在の場合のリダイレクト先を指定するnotfound:もある。

#!/usr/bin/fossil
directory: /home/fossil/repos
notfound: http://url-to-go-to-if-repo-not-found/

CGIスクリプトをcgi-bin/repoとした場合、展開後は [http://mydomain.org/cgi-bin/repo/XYZ] のようなURLで [/home/fossil/repos/XYZ.fossil] にアクセス可能。

したがって、実際の展開時は、アクセスURLの綺麗さを考慮して、CGIのファイル名をfossilにして、以下の.htaccessでfossilをCGI扱いする。

<FilesMatch fossil$>
	SetHandler cgi-script
</FilesMatch>

これで [http://mydomain.org/fossil/repoX] でアクセスする感じになる。これがいい。こういう方式にしておくと、既存のサイトにfossilを配置するだけでfossilのホストも可能になる。

Configure

Fossil: CGI Script Configuration Options

fossilをCGIで動作させる場合、CGIスクリプトに記載可能なオプションがある。

重要 項目 説明
repository: PATH repositoryかdirectoryは必須。fossilのリポジトリーパス。
x directory: PATH repositoryかdirectoryは必須。fossilのリポジトリーが複数ある場合の親ディレクトリー。親ディレクトリー内の全リポジトリーを提供可能。
notfound: URL directory指定時に、PATH_INFOがfossilのリポジトリーと不一致の場合このURLにリダイレクトする。
x repolist ブール値。この項目の指定があり、direcotoryも指定があれば、PATH_INFOが空の場合、リポジトリーリストを表示する。

応答のskinはrepolist-skinが0以外の最初のリポジトリーの設定で決まる。 サブディレクトリーを再帰して、*.fossilを表示するが以下の例外がある。

  • .で始まるファイルは隠しファイル扱いでスキップ。
  • .fossilのベース名と同じディレクトリーがある場合、リストは表示されるがリンクにはならない。例えば、XYZとXYZ.fossilが同じ階層にある場合。大文字・小文字無視。この場合、ベース名の異なるディレクトリーに移動させる。
localauth
skin: NAME NAMEが組み込みスキンの場合、リポジトリー自体のskinを無視してこれを使用する。

ユーザーにskinを選択させたい場合、skinの異なる複数のCGIスクリプトを用意して、同じrepositoryかdirecotoryを指定すれば、任意のCGIにアクセスすることでスキンを選択可能になる。

files
setenv
HOME
cgi-debug
errorlog
timeout
extroot
redirect
jsmode
mainmenu

とりあえず、direcotryとrepolistを指定すると良いと思う。

#!/usr/bin/fossil
directory: /home/fossil/repos
notfound: /fossil
repolist

repolistはskinがない場合、以下のようなシンプルな表示になる。

Fossil Repositories
Filename		Project Name		Last Modified		Login Group
dir/test.fossil				3.0 days		
fossil.fossil		Fossil		3.1 days		
test.fossil				3.0 days		

repolistはディレクトリー単位の表示はできず、dirにアクセスするとnotfoundになる。notfoundで/か/fossilの一覧ページを指定したほうがよさそう。

Usage

Quick

Fossil: Fossil Quick Start Guide

プロジェクトの基本作業。

Starting A New Project

以下のコマンドで空のfossilリポジトリーを作成する。

fossil init repository-filename

repository-filenameには.fossilの拡張子をつける。必須ではないが、Web UIでディレクトリーを使う場合に、静的ファイルとの区別に.fossil拡張子を使っている。特別な理由がない限り、.fossilの拡張子を指定する。

コマンドを実行すると、以下が表示される。

project-id: 802c1bc57dace208af5be1eb3de12bcc0df020c3
server-id:  be6489d9085a20f2cc0e62c36528e48f7fe5ffb3
admin-user: senooken (initial password is "aNiko5zuBE")

プロジェクトの初期ユーザー名とパスワードが表示される。ユーザー名はOSのユーザー名がデフォルト。オプションで変更可能。

プロジェクト作成時のパスワード表示を見逃したり、忘れた場合は、fossil userコマンドで再設定可能 (Fossil: Help: user)。

fossil user list
fossil user password <username> [<password>]

Checking Out A Local Tree

まず、ツリーのルートとなるディレクトリーを作成して、fossil openでDBからローカルコピーをチェックアウトする。

fossil open ../myclone.fossil

このコマンドで最新のファイル群がチェックアウトされる。以下のコマンド群でローカルツリーの状態を把握できる。

fossil info # git status --name-status相当?
fossil status # git status相当?
fossil changes # git status相当?
fossil diff # git diff相当?
fossil timeline # git log相当?
fossil ls # git ls-files相当?
fossil branch # git branch相当?

違うバージョンやブランチに切り替えるには、以下のコマンドを使う。

fossil update
fossil checkout

updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。

Making and Committing Changes

以下のコマンドでファイルの追加・削除ができる。

fossil add file...
fossil rm file...
fossil addremove file...

以下のコマンドで前回コミットからの変更点の概要を表示する。

fossil changes

正確な差分はfossil diffで表示できる。

fossil diff

fossil difは現在のツリーと最後に変更をコミット時の差分を表示する。コミットしていない場合、最新コミットの差分を表示する。

他のユーザーの変更の確認にはfossil timelineを実行し、コミットを見つけて、diffを実行する。実行する。

fossil timeline
2021-03-28
03:18:54 [ad75dfa4a0] *CURRENT* Added details to frobnicate command (user: user-one tags: trunk)
2021-03-27
23:58:05 [ab975c6632] Update README.md. (user: user-two tags: trunk)
fossil diff --from current --to ab975c6632

ローカルの変更のコミットはcommitで行う。

fossil commit

VISUALかEDITOR環境変数で指定されたエディターでコメントの入力を要請される。

リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。

Branching And Merging

新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。

2個のブランチのマージには、まずマージ先のブランチを更新する。その後、組み込む他のブランチをマージする。例えば、trunkにfeatureXをマージするにはイアkのようにする。

fossil update trunk
fossil merge featureX
# make sure the merge didn't break anything...
fossil commit

マージがうまくいかなかったりしたら、以下のコマンドで復元できる。

fossil undo

redoもある。

Branching, Forking, Merging, and Tagging

Fossil: Branching, Forking, Merging, and Tagging

一つの親コミットに対して、複数のコミットが派生して並列することをフォークと呼んでいる。それとは別でブランチというのがある。Fossilの内部的にはどちらも同じ。違いは、人間に意図があるか。ブランチは名前のついたフォークという扱い。

特定の機能の開発などで、完了するまで本流とは別で進めたい場合に使う。

fossilでブランチの作成には2の方法がある。

1個目はcommit --branch。ほとんどの場合に推奨される。最初のコミット作成時にブランチも作る。

fossil commit --branch my-new-branch-name

2番目はbranch new。

fossil branch new my-new-branch-name trunk
fossil update my-new-branch-name
fossil commit

この方法は手順が多いし、YAGNI原則に反するのでお勧めされない。

trunkという名前のブランチは、fossilのデフォルトブランチ名。

ローカルチェックアウトがブランチの場合、以下のコマンドで単純にtrunkにマージできる。

fossil merge

自動的に検知してくれる。

Get

基本的な使用方法

# clone
fossil clone <repository url>

# sync: cloneの再開など。
fossil sync -R <repository url>

# rebuild: 取得後のDB再構築。
fossil rebuild <repository path>

上記コマンドでファイルを取得する。Fossilは1ファイルで管理するので、cloneだと取得しきれない可能性がある。中断した場合などはsyncで再取得する。再取得後、反映されない場合、rebuildで取得データからDBを再構築する。

Empty

fossilをcloneすると空で、Web UIで [cannot resolve name: trunk] と表示されることがある。これは、リポジトリーのクローンが失敗している。

以下のコマンドでデータ取得を継続する。

fossile sync -R <repositor url>

これでもダメなら、以下のコマンドでDBを再構築する。

fossile rebuild <repository path>

これで解決した。

Import And Export

情報源=Fossil: Import And Export

FossilにはGitのインポート・エクスポート機能がある。Gitに他のVCSのインポート・エクスポート機能があるので、Gitを経由して他のいろんなVCSをfossilとインポート・エクスポート可能。

Git → Fossil

以下のコマンドでインポート・取り込める。

cd git-repo
git fast-export --all | fossil import --git new-repo.fossil

fossil importコマンドの第3匹数で新しいFossilリポジトリーの名前を指定する。

--gitを指定しているが、実際は不要。なぜなら、Fossilが対応している他のリポジトリーはgitだけだから。ただし、将来的に他のリポジトリーにも対応するかもしれないので、互換性のために一応--gitを指定しておく。

Fossil → Git

Fossilリポジトリーのgitへの変換は以下のコマンド。

git init new-repo
cd new-repo
fossil export --git ../repo.fossil | git fast-import

Mirror A Fossil Repository In Git

Fossil v2.9からFossilリポジトリーのgitまたはGitHubへのミラーリングに対応している。Fossilは元々自己ホスト可能だが、この機能でGitHubでのホストも可能になる。

Bidirectional Synchronization

Gitとの同期機能もある。マークファイルを使用して行う。

例として、fossilリポジトリーの最新コミットをgitに取り込む場合を考える。

まず最初にfossilをクローンして取り込む。

fossil clone /path/to/remote/repo.fossil repo.fossil
mkdir repo
cd repo
fossil open ../repo.fossil
mkdir ../repo.git
cd ../repo.git
git init .
fossil export --git --export-marks ../repo/fossil.marks  \
       ../repo.fossil | git fast-import                  \
       --export-marks=../repo/git.marks

fossilの最新コードをgitに取り込む場合、以下のようにfossil pullで最新コミットを取得後、

cd ../repo
fossil pull
cd ../repo.git
fossil export --git --import-marks ../repo/fossil.marks  \
       --export-marks ../repo/fossil.marks               \
       ../repo.fossil | git fast-import                  \
       --import-marks=../repo/git.marks                  \
       --export-marks=../repo/git.marks
git fast-export --import-marks=../repo/git.marks                  \
    --export-marks=../repo/git.marks --all | fossil import --git  \
    --incremental --import-marks ../repo/fossil.marks             \
    --export-marks ../repo/fossil.marks ../repo.fossil
cd ../repo
fossil push

わかりにくいからあまりしたくない。

インポートの再開

https://chatgpt.com/c/676fb751-f140-800b-b27b-22d683926e3e

インポートが途中で中断された場合。ややこしい。fossil importは1回のコマンドで完了する設計になっているから。途中から再開する機能は直接はない。工夫が必要。

  1. gitリポジトリー側のコミットログをフィルターして必要な部分だけ残す。
  2. fossilに一部インポート済みの場合、インポート後の履歴をformat-patchでファイルに出力して、それをfossil patch applyで取り込む。
  3. 何回かに分けて、fossilのリポジトリーにインポート後、fossilのマージ機能で1個のfossilリポジトリーにマージ。

はっきりいって面倒だから、ローカルPCで履歴を全部取得して、fossilに取り込んで、取り込んだDBを転送した方が確実。

Git to Fossil Translation Guide

Fossil: Git to Fossil Translation Guide

Repositories and Checkouts Are Distinct

Fossilではリポジトリーとチェックアウトは明確に区別されている。gitの場合、.gitのあるディレクトリーで管理しているので、複数のチェックアウトを展開できない。

Help

[Fossil: Help] にFossilのコマンド、Web UIページ、設定が一覧されている。

数が多いので特に重要なものを整理する。

Available web UI pages:

FossilのWeb UIページ。リポジトリーに対して/<page>の形式でアクセスする。ページ毎に?のクエリーパラメーターを受け付けるものがある。

artifact file whatis

fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。?txtを指定することでfossilのレンダーリングなしでtxtで表示する。

download

Fossil: Help: /download

最新ソースのtar玉とZIP提供の簡単なダウンロードページを提供する。

home index not_found

setup_configで指定したホームページにリダイレクトするスタブページ。

uv

Fossil: Help: /uv

バージョン管理していないファイルを表示する。

sqlar tarball zip

指定したチェックインの該当アーカイブファイルを応答する。

setup

setup_config

Fossil: Help: /setup_config

Admin/Configurationページ。プロジェクト名などを設定できる。Homeの初回アクセス時に表示される。

Fossil.gnusocial.jp fossil gnusocial setup config.png

以下の項目がある。

項目 RSS Property default 説明
Project Name project-name プロジェクト名
Project Description project-description プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。
Canonical Server URL email-url サーバーのURL。他のリポジトリーがcloneなどに使うURL。末尾の/は省略する。永続サーバーとして使わない場合は空白のままにする。https://fossil.gnusocial.jp/fossil/gnusocialのようなプロジェクトホームのベース名が推奨値。
Tarball and Zip-archive Prefix short-project-name Project Name tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。
Download Tag download-tag trunk /downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。
Index Page index-page /home Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。
Main Menu mainmenu Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。
  1. メニュー表示用テキスト。
  2. クリック時のハイパーリンク。/開始はリポジトリールート。
  3. TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。
  4. メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示できる。

初期値は以下。

Home      /home        *              {}
Timeline  /timeline    {o r j}        {}
Files     /dir?ci=tip  oh             desktoponly
Branches  /brlist      o              wideonly
Tags      /taglist     o              wideonly
Forum     /forum       {@2 3 4 5 6}   wideonly
Chat      /chat        C              wideonly
Tickets   /ticket      r              wideonly
Wiki      /wiki        j              wideonly
Admin     /setup       {a s}          desktoponly
Logout    /logout      L              wideonly
Login     /login       !L             wideonly

capexprの詳細 (Fossil: TH1 Scripts)。権限を意味する文字列 (Fossil: User Capability Reference)。

Download /download * {}などでダウンロードページでいいと思う。

Custom Sitemap Entries sitemap-extra /sitemapページの追加メニュー。

[Project Name]/[Project Description]/[Tarball and Zip-archive Prefix] あたりを設定しておけば良いと思われる。

[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。

Web

FossilのWeb UI自体のマニュアルはない模様。画面内の説明で完結している模様。自分で使いながら整理する。

Home

/home にアクセスすると、初回は以下のように表示される。

Fossil unnamed first home.jpg

Home This is a stub home-page for the project. To fill in this page, first go to setup/config and establish a "Project Name". Then create a wiki page with that name. The content of that wiki page will be displayed in place of this message.

また、サイトタイトルが [Unnamed Fossil Project] となっており見栄えが少々悪い。

setup_config (https://fossil.gnusocial.jp/fossil/gnusocial/setup_config) にアクセスして、Project Nameなどを入力する必要がある。

Empty Page

https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919

Homeページで最低限の設定をすると、設定完了済みとなり、その状態で/homeを表示すると、 [Empty Page] と表示される。

Fossil.gnusocial.jp fossil test home empty-page.png

設定が必要な模様。

解決方法

  1. Webインターフェースでログインし、/Setup ページにアクセスします。
  2. 「Start Page」を設定します:
    • 「Start Page」に表示したいWikiページの名前を指定します(例:Home)。
    • Wikiページがまだない場合は、Wikiを作成してください。

Wikiページの作成方法

  1. /wiki ページにアクセス。
  2. 「新しいWikiページを作成」ボタンをクリック。
  3. ページ名(例:Home)と内容を入力し、保存します。

ただ、このWikiページの作成はちょっと考えたほうがいい。

リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。

Permission

Fossilのユーザー管理機能は権限管理機能と同じ意味。

Password

Fossilのユーザーは、リポジトリーの作成時 (fossil init/fossil import) 時に作成される。

fossil init repository-filename
project-id: 802c1bc57dace208af5be1eb3de12bcc0df020c3
server-id:  be6489d9085a20f2cc0e62c36528e48f7fe5ffb3
admin-user: senooken (initial password is "aNiko5zuBE")

プロジェクトの初期ユーザー名とパスワードが表示される。ユーザー名はOSのユーザー名がデフォルト。オプションで変更可能。

Password reset

プロジェクト作成時のパスワード表示を見逃したり、忘れた場合は、fossil userコマンドで再設定可能 (Fossil: Help: user)。

fossil user list
fossil user password <username> [<password>]

ユーザー名の変更

https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919

ユーザー名の改名はできない。同じことをしたければ、新ユーザーを作成して、旧ユーザーを無効にする。

1 以下のコマンドで新ユーザーを作成する。

fossil user add <newuser> <mypassword>

2 以下のコマンドで旧ユーザーを無効にする。

fossil user disable <olduser>

3 必要に応じて新ユーザーに旧ユーザーと同じ権限を付与する。

fossil user capabilities 新しいユーザー名 権限

Password skip

https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919

Fossilではユーザーのパスワードを空にはできない。

パスワードなしでのログインを実現したい場合、いくつかの方法がある。

  1. HTTP Basic認証
  2. SSH鍵認証: ssh鍵でcloneしたらパスワード不要。
  3. Web UIでpublicアクセスを設定: Web UIの/setupに移動し、anonymouseかnobodyユーザーに権限を付与。
  4. 自動ログインCookie

Wiki

Wiki in Fossil

Fossilは、様々な用途でFossil wikiやMarkdownを使用する。

  • 単独Wiki: 各wikiページには、チェックインとは独立した独自の変更履歴がある。
  • .wiki/.md/markdownの拡張子の埋め込みドキュメントファイル: ソースツリー内の.wiki/.md/.markdown拡張子のファイルは、Fossilサーバーへの特別なURLでアクセス・表示可能。プロジェクトドキュメントをソースツリーに保存しながらオンラインアクセス可能。
  • バグレポートの説明・コメント/フォーラムメッセージ/チェックインコメント (fossil-wikiのみ)
  • 技術ノート
  • チェックインとブランチのメモ: branch/<branch name> または checkin/<hash> の単独wikiページは、対応するブランチチェックインに関連づけられており、タイムラインと情報画面のaboutセクションに表示される。歴史的なメモの記録に役立つ。

Project Documentation

単独wikiの他に埋め込みドキュメントがある。埋め込み文書はソースツリー内の文書をWebページとして表示する機能。埋め込み文書には以下の利点がある。

  • ソースコードと一緒にバージョン管理されるため、バージョンとドキュメントの対応が明確。
  • 任意のテキストエディターで編集可能。
  • 権限保有者のみ変更可能 (利点にも欠点にもなる)。
1.0 Fossil Support For Embedded Documentation

Web UIでは/docページを使用した埋め込みドキュメントに対応している。埋め込みドキュメントのアクセスは、Webブラウザーで次の形式のURLを指定する。

<base url> /doc/ <version> / <file name>
  • <base url>: fossil webサーバーへのアクセスのメインURL。例えば、https://fossil-scm.org/home (CGIファイルへのパス相当)。
  • <version>: 埋め込み文書を含むチェックイン の名前。ハッシュ、ブランチ、タグ、タイムスタンプなど。特別な識別子の [ckout] にもできる。これはチェックインではなく、ローカルソースツリーのファイルを意味する。/doc/ckout URLはコミット前のプレビューの表示が目的。このプレビューは重要。コミット前に表示結果を必ず確認する。fossil uiには--ckout-alias <name> オプションがあり <name> をckoutの別名にできる。例えば、/doc/trunkをfossil ui --ckout-alias trunkでプレビュー表示できる。
  • <file name>: ソースツリーのルートを基準とした文書パス。MIMEタイプは拡張子で決まる。.css/.gif/html/.jpg/.png/txtなどを認識する (Fossil: Mimetype List)。.wiki/.md/.markdown/.txtには、標準のfossilヘッダーとフッターが追加された状態でレンダリングされる。それら以外は、そのままWebブラウザーに直接配信される。
1.1 HTML Rendering With Fossil Headers And Footers

拡張子が.html/.htmのファイルは、直接Webブラウザーに表示される。ただし、以下のdiv要素で始まる場合、Fossilヘッダーとフッターが追加されてから表示される。

<div class='fossil-doc' data-title='Title Text'>

class='fossil-doc'が必要。data-titleはオプションで、Fossilヘッダーに表示されるタイトルになる。以下が例。

なお、この方法で表示するHTMLは完全に独立しているわけではない。例えば、script要素はFossilのCSP (Content Security Poicy) の影響を受ける。詳細は「Fossil: Skinning the Fossil Web Interface - Header and Footer Processing」と「Fossil: The Default Content Security Policy (CSP)」にある。

2.0 Server-Side Text Substitution
2.1 "$ROOT" In HTML and Markdown Hyperlinks
2.2 "$CURRENT" In "/doc/" Hyperlinks
2.3 TH1 Documents
3.0 Examples

Wiki Formatting Rules

Fossil: Wiki Formatting Rules

Fossil: Markdown Formatting Rules

TH1 Scripts

Fossil: TH1 Scripts

Content

How The Fossil Download Page Works

FossilのDownload (Fossil: Downloads) ページの仕組み。デフォルトではこのページはない。

この画面はバージョン管理していないファイルで実装されている。配布物の格納ディレクトリーのファイルリストをXMLHttpRequestで取得して、それを表示している。

以下の手順で行う。

  1. download.jsに新しいリリース用の情報を記入して、新しいバージョン番号を認識できるようにする。
  2. fossil uv addで配布用バイナリーを追加。
  3. fossil uv syncでpush

権限を持つユーザーのpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。

Unversioned Content

Image Format vs Fossil Repo Size

Fossil: Image Format vs Fossil Repo Size