「Fossil」の版間の差分
(Recovery) |
|||
(同じ利用者による、間の38版が非表示) | |||
1行目: | 1行目: | ||
[[Category:IT]] | [[Category:IT]] | ||
==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の最後に/をつける模様。 | ||
== | === Fossil vs Git === | ||
[https://news.ycombinator.com/item?id=15752725 Fossil – Next Generation | Hacker News] | |||
=== Questions And Criticisms === | |||
[https://fossil-scm.org/home/doc/trunk/www/qandc.wiki Fossil: Questions And Criticisms] | |||
=== Contribution === | |||
==== Issue ==== | |||
Fossilのチケット「[https://fossil-scm.org/home/reportlist Fossil: Ticket Main Menu]」はあるが、これは開発者の管理用になっている。 | |||
一般ユーザーがバグを見つけた場合、フォーラム ([https://fossil-scm.org/forum/forum Fossil User Forum: Forum]) で質問することになっている。 | |||
なお、fossil本体 <nowiki>[https://fossil-scm.org/home]</nowiki> とFossil User Forum <nowiki>[https://fossil-scm.org/forum/]</nowiki> は別サイトなので、/forumの方でユーザー登録が必要なので注意する。 | |||
==== Compiling and Installing Fossil ==== | |||
[https://fossil-scm.org/home/doc/trunk/www/build.wiki Fossil: Compiling and Installing Fossil] | |||
ソースコードの修正提案にあたり、Fossilを自前でビルドする。 | |||
./configure --prefix=~/.local/stow/fossil-latest | |||
make | |||
以下のエラー。 | |||
ld: Undefined symbols: | |||
_libiconv, referenced from: | |||
_fossil_path_to_utf8 in utf8.o | |||
_libiconv_close, referenced from: | |||
_fossil_path_to_utf8 in utf8.o | |||
_libiconv_open, referenced from: | |||
_fossil_path_to_utf8 in utf8.o | |||
clang: error: linker command failed with exit code 1 (use -v to see invocation) | |||
iconvがいる模様。 | |||
生成されたMakefileを以下のように修正してmake clean; make; make installするとうまくいった模様。<syntaxhighlight lang="sh"> | |||
patch <<-'EOT' | |||
--- Makefile.old 2025-01-06 07:23:21 | |||
+++ Makefile 2025-01-06 07:20:40 | |||
@@ -39,7 +39,7 @@ | |||
E = | |||
TCC = cc | |||
- | |||
+TCC += -DWITHOUT_ICONV | |||
#### Tcl shell for use in running the fossil testsuite. If you do not | |||
# care about testing the end result, this can be blank. | |||
# | |||
EOT | |||
</syntaxhighlight> | |||
=== Note === | |||
GitからFossiへの移行時の注意点。 | |||
デフォルトでシンボリックリンクを維持しない。 | |||
「[https://fossil-scm.org/home/help?cmd=allow-symlinks Fossil: Help: allow-symlinks]」 | |||
デフォルトでオフになっている。オンにする。後々問題になるので、シンボリックリンクをそもそもやめた方がいいかもしれない。 | |||
== Issue == | |||
fossilを使っていて気になる動きがある。 | |||
=== /dirでindexの表示 === | |||
/dirページはreadmeは一覧表示してくれる。一方、/uv /docはindexファイルを一覧表示する。 | |||
/dirページもreadmeがなければ、indexファイルを一覧表示してほしい | |||
=== Binary === | dirのSQL部分にindexを追加するだけでいけると思う。 | ||
=== /doc/trunk/でindex.md未表示 === | |||
プロジェクト直下にindex.mdを設置。/doc/trunk/での表示を期待したが、/doc/trunkで表示。バグ? | |||
==Install== | |||
===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行目: | 123行目: | ||
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行目: | 144行目: | ||
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行目: | 168行目: | ||
これで <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行目: | 196行目: | ||
サブディレクトリーを再帰して、*.fossilを表示するが以下の例外がある。 | サブディレクトリーを再帰して、*.fossilを表示するが以下の例外がある。 | ||
* .で始まるファイルは隠しファイル扱いでスキップ。 | *.で始まるファイルは隠しファイル扱いでスキップ。 | ||
* .fossilのベース名と同じディレクトリーがある場合、リストは表示されるがリンクにはならない。例えば、XYZとXYZ.fossilが同じ階層にある場合。大文字・小文字無視。この場合、ベース名の異なるディレクトリーに移動させる。 | *.fossilのベース名と同じディレクトリーがある場合、リストは表示されるがリンクにはならない。例えば、XYZとXYZ.fossilが同じ階層にある場合。大文字・小文字無視。この場合、ベース名の異なるディレクトリーに移動させる。 | ||
|- | |- | ||
| | | | ||
192行目: | 261行目: | ||
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行目: | 284行目: | ||
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行目: | 300行目: | ||
updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。 | updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。 | ||
==== Making and Committing Changes ==== | updateはgit rebaseに近い。checkoutはgit reset --hard/git checkout -f相当。ローカルの変更を破棄したい場合にcheckoutを使う。 | ||
====Making and Committing Changes==== | |||
以下のコマンドでファイルの追加・削除ができる。 | 以下のコマンドでファイルの追加・削除ができる。 | ||
fossil add file... | fossil add file... | ||
257行目: | 328行目: | ||
リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。 | リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。 | ||
==== Branching And Merging ==== | ====Branching And Merging==== | ||
新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。 | 新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。 | ||
269行目: | 340行目: | ||
redoもある。 | redoもある。 | ||
=== Branching, Forking, Merging, and Tagging === | === Branch === | ||
Fossilでのブランチの扱いを整理する。 | |||
==== Create ==== | |||
情報源 | |||
* [https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki Fossil: Fossil Quick Start Guide] | |||
* [https://fossil-scm.org/home/doc/trunk/www/branching.wiki Fossil: Branching, Forking, Merging, and Tagging] | |||
以下の2コマンドでブランチを作成できる。 | |||
* commit --branch | |||
* branch new | |||
ブランチの作成は通常commit --branchでコミット時に作る。これはYAGNI原則に従ったもの。 | |||
branch newでコミットなしでブランチを作ることものできる。ただ、この方法は非推奨。以下のようにブランチ作成、ブランチ切り替え、コミットと3回コマンドが必要だから。 | |||
fossil branch new my-new-branch-name trunk | |||
fossil update my-new-branch-name | |||
fossil commit | |||
commit --branchだと上記が1回で済む。 | |||
==== Switch ==== | |||
情報源 | |||
* [https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki Fossil: Fossil Quick Start Guide] | |||
* [https://fossil-scm.org/home/doc/trunk/www/branching.wiki Fossil: Branching, Forking, Merging, and Tagging] | |||
ブランチの切り替えは以下2コマンドで行う。 | |||
* update: autosyncオプションを尊重して、切り替え時にマージもする。git rebaseに近い。 | |||
* checkout: 自動同期せず、ローカルを上書きする。 | |||
==== Default branch ==== | |||
https://chatgpt.com/c/677efd9e-a904-800b-b2f8-c53d4881888b | |||
fossilではリポジトリー作成時などはtrunkがデフォルトのブランチ名になる。 | |||
ただし、gitからインポートした場合などはtrunkがない。 | |||
fossilのtrunkブランチに必ずしも合わせる必要はない。が、特に理由がないなら、fossilの標準に合わせたほうがわかりやすい。 | |||
その場合、以下の手順でtrunkをデフォルトブランチに変更する。 | |||
# mainブランチをtrunkに改名 | |||
fossil rename main trunk | |||
# デフォルトのブランチ設定を更新 | |||
fossil settings main-branch trunk | |||
==== 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行目: | 412行目: | ||
自動的に検知してくれる。 | 自動的に検知してくれる。 | ||
=== Get === | ===Get=== | ||
基本的な使用方法 | 基本的な使用方法 | ||
# clone | # clone | ||
304行目: | 424行目: | ||
上記コマンドでファイルを取得する。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行目: | 433行目: | ||
これで解決した。 | これで解決した。 | ||
=== 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行目: | 446行目: | ||
--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行目: | 452行目: | ||
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行目: | 488行目: | ||
わかりにくいからあまりしたくない。 | わかりにくいからあまりしたくない。 | ||
==== インポートの再開 ==== | ====インポートの再開==== | ||
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 == | === Other === | ||
==== 過去の履歴の削除 ==== | |||
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919 | |||
Fossilでは過去の履歴の削除は推奨されていない。 | |||
SQLiteのSQLで直接操作するか、gitに変換してgitで過去の履歴を削除してインポートし直す。 | |||
gitでやるほうが安全。ただし、変換時にfossil固有情報が消失する。 | |||
===== Git ===== | |||
gitの場合。 | |||
fossil export --git > export.git | |||
fossil init newrepo.fossil | |||
fossil import --git export.git | |||
ただし、この方法はfossil固有の情報が消失する。例えば、以下。 | |||
* Fossilのユーザ名・権限 | |||
* Fossil特有のデータ (Wikiページ、uv) | |||
対策がある。 | |||
* ユーザー名一覧を出力しておく。 | |||
* Wikiページは使わないようにして、埋め込み文書で管理する。 | |||
* uvファイル群も出力しておく。 | |||
===== SQLite ===== | |||
手順: | |||
'''1 リポジトリをSQLiteで開く''': | |||
sqlite3 repo.fossil | |||
'''2 対象コミットを特定''': 問題のコミットIDをFossilのログなどで確認します。 | |||
fossil timeline | |||
'''3 対象データを削除''': 以下のSQLを実行して問題のデータを削除します(例としてファイルの削除)。 | |||
DELETE FROM blob WHERE rid = (対象のリビジョンID); | |||
DELETE FROM delta WHERE srcid = (対象のリビジョンID); | |||
DELETE FROM event WHERE objid = (対象のリビジョンID); | |||
'''4 データベースを圧縮''': | |||
VACUUM; | |||
'''5 整合性を確認''': | |||
fossil test-integrity | |||
===== Deleting Content From Fossil ===== | |||
[https://fossil-scm.org/home/doc/trunk/www/shunning.wiki Fossil: Deleting Content From Fossil] | |||
Shunningという削除の仕組みがある模様。 | |||
==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 commands: === | ||
==== Repository ==== | |||
* init/new | |||
* clone | |||
* open | |||
* close | |||
===== init/new ===== | |||
* [https://fossil-scm.org/home/help?cmd=init Fossil: Help: init] | |||
* [https://fossil-scm.org/home/help?cmd=new Fossil: Help: new] | |||
fossil new ?OPTIONS? FILENAME | |||
fossil init ?OPTIONS? FILENAME | |||
* --template <repository>: リポジトリーから設定をコピーする。 | |||
* <code>-A|--admin-user</code> ''USERNAME'': 管理ユーザー名を指定する。 | |||
* --project-name: プロジェクト名。/setup_configでの設定? | |||
* --project-desc: /setup_configの設定? | |||
FILENAMEのファイル名でリポジトリーを作成する。cloneとは区別される。cloneは既存プロジェクトのコピーを作る。new/initは新規プロジェクトを作る。 | |||
デフォルトで、現在のログイン名を管理ユーザーに使う。-A|--admin-userで変更可能。 | |||
デフォルトで、全設定がデフォルト値で初期化される。既存リポジトリーを--templateで指定すれば、その値で上書き可能。 | |||
===== clone ===== | |||
[https://fossil-scm.org/home/help?cmd=clone Fossil: Help: clone] | |||
fossil clone ?OPTIONS? URI ?FILENAME? | |||
* -A|--admin-user <username> | |||
* -u|--unversioned: uvも同期する。 | |||
* --workdir <dir>: デフォルトで<file name>相当。 | |||
URIで指定したリポジトリーのクローンを<file name>という名前のローカルファイルに作成する。<file name> が省略された場合、URIのパスの最後の要素から推測される。 | |||
URIは以下のいずれかの形式。 | |||
* HTTP/HTTPS protocol: http[s]://[userid[:password]@]host[:port][/path] | |||
* SSH protocol: ssh://[userid@]host[:port]/path/to/repo.fossil[?fossil=path/fossil.exe] | |||
* Filesystem: [file://]path/to/repo.fossil | |||
For ssh and filesystem, path must have an extra leading '/' to use an absolute path. | |||
このコマンドは--no-openを指定しない限り、同時にopen (チェックアウト=ファイル展開) もする。 | |||
デフォルトで、現在のログイン名をcloneの管理ユーザーとして使う。-A|--admin-userで上書き可能。 | |||
なお、fossilには--depth相当のシャロークローンはない。 | |||
「[https://fossil-scm.org/forum/forumpost/587041dc81 Fossil User Forum: Towards shallow cloning]」にその説明がある。 | |||
Fossilはwikiなどのいろんな情報を持っており、シャロークローンした場合、そこの整合性の維持が難しくなるとのこと。まあ、それはそうだろう。 | |||
特定バージョンのファイルが欲しいだけなら、そのバイナリーをWebから取得すればいい。開発者ならcloneすればいい。 | |||
===== open ===== | |||
* [https://fossil-scm.org/home/help?cmd=open Fossil: Help: open] | |||
* [https://fossil-scm.org/home/doc/trunk/www/concepts.wiki Fossil: Fossil Concepts] | |||
* [https://fossil-scm.org/home/doc/trunk/www/fiveminutes.wiki Fossil: Up and running in 5 minutes as a single user] | |||
fossil open <repository> [<version>] [<options>] | |||
* --repodir <dir>: <repository> がURIの場合、cloneの保存先<dir>。初期値は.。機能していないように見える。--workdirを使えばよさそう。 | |||
* --workdir <dir>: .の代わりに使う格納ディレクトリー。なければ作られる。 | |||
よく使う。repo.fossilのfossilリポジトリーに接続して、チェックインをローカルファイルに展開する。 | |||
<repository>にはURIも指定できる。最新ファイルだけや、特定バージョンだけ取得する場合にも使えそう。 | |||
cloneだと履歴全てを取得する。URIにはcloneと同じ形式が使える。 | |||
openすると、openしたディレクトリーに_FOSSIL_ (UNIX系OSだと.fslckout) ファイルが作成される。このファイルで、.fossil SQLiteファイルとディレクトリーを関連づけている。 | |||
===== close ===== | |||
[https://fossil-scm.org/home/help?cmd=close Fossil: Help: close] | |||
openの反対。DBへの接続を終了する。未コミットの編集中のファイルがある場合、-fで強制終了が必要。closeすることで誤ってコミットすることがなくなる。 | |||
DB接続を終了するといっても、やることは実際にはopen中のディレクトリーないの_FOSSIL_(.fslckout) を削除するだけ。 | |||
closeは基本的に実行することはない。closeが必要な場面は限られている (https://chatgpt.com/c/6778f88d-c338-800b-a758-7c51de5856fa<nowiki/>)。 | |||
# リポジトリーのコピーをファイル・テンプレートとして扱いたい場合: 例えば、ディレクトリー構造だけWebからコピーしてきたい場合などに便利。 | |||
# リポジトリーのコピーを別の用途に使いたい場合。 | |||
# 複数のバージョンをローカルに展開して、並行作業する場合。 | |||
openしているディレクトリーは、.fossilのリポジトリーの履歴保存対象となり、これは1個のディレクトリーとだけ関連づいている。これの切替用コマンド。 | |||
==== Information ==== | |||
* version | |||
* info | |||
* status | |||
* changes | |||
* diff | |||
* timeline | |||
* ls | |||
* branch | |||
* update | |||
* checkout | |||
* merge | |||
* undo | |||
* redo | |||
==== Change ==== | |||
*add | |||
* rm | |||
* addremove | |||
* mv/rename | |||
*commit | |||
===== commit/ci ===== | |||
* [https://fossil-scm.org/home/help?cmd=commit Fossil: Help: commit] | |||
* [https://fossil-scm.org/home/help?cmd=ci Fossil: Help: ci] | |||
fossil commit ?OPTIONS? ?FILE...? | |||
fossil ci ?OPTIONS? ?FILE...? | |||
新しいバージョン (コミット) を作成する。-mでコメントテキストか、-Mでコメントファイルの指定がない限り、チェックインコメント用にエディターを開く。 | |||
===== mv/rename ===== | |||
[https://fossil-scm.org/home/help?cmd=mv Fossil: Help: mv] | |||
fossil mv|rename OLDNAME NEWNAME | |||
fossil mv|rename OLDNAME... DIR | |||
* --hard: チェックアウト内の実ファイルも操作する。 | |||
ファイルまたはディレクトリーを移動か改名する。 | |||
mvはディスク上のファイルの名前を変更したり移動しない。次のコミット時に、ファイル名が変更され太忠事実を記録するだけ。ただし、デフォルトの動作をオプションはmv-rm-file設定で上書き可能。 | |||
renameはオプションやmv-rm-filesがあってもディスク上のファイルに変更を加えない。 | |||
git mvを期待するなら、基本は--hardを使ったほうがいいだろう。 | |||
==== Recovery ==== | |||
* revert | |||
* undo | |||
* redo | |||
===== revert ===== | |||
[https://fossil-scm.org/home/help?cmd=revert Fossil: Help: revert] | |||
Usage: fossil revert ?OPTIONS? ?FILE ...? | |||
* -r|--revision VERSION: Revert given FILE(s) back to given VERSION | |||
==== Sharing ==== | |||
* push | |||
* pull | |||
* sync | |||
* update | |||
* remote | |||
* remote-url | |||
===== push ===== | |||
[https://fossil-scm.org/home/help/push Fossil: Help: push] | |||
fossil push ?URL? ?options? | |||
* -B|--httpauth <username>:<password>: HTTP認証の情報を指定する。 | |||
URLが未指定の場合、最後に使ったclone/push/pull/remote/syncのURLを流用する。 | |||
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919 | |||
リモートサーバーにpushしたい場合、工夫が必要。 | |||
# pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。パスワードを省略してユーザー名だけ指定すれば、対話でパスワードを聞いてくるのでこれがいい。 | |||
# fossil remote-urlで認証情報付きのURLを設定。これも対話的になるのでいまいちだが、ユーザー名だけを指定すればOK。 | |||
# sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。 | |||
初回だけURLでプッシュして対話的に入力するのがいい気がするかな。 | |||
===== remote ===== | |||
* [https://fossil-scm.org/home/help?cmd=remote Fossil: Help: remote] | |||
* [https://fossil-scm.org/home/help?cmd=remote-url Fossil: Help: remote-url] | |||
fossil remote ?SUBCOMMAND ...? | |||
* fossil remote scrub: 記憶したリモートURLのパスワードを忘れる。 | |||
* fossil remote URL: defaultのリモートURLを変更する。 | |||
リモートURLの管理用コマンド。git remoteに近い。fossil remote scrubでパスワードの消去と、fossil remote URLでURLにアカウント情報を入力する用途用 [https://username:password@domain/path<nowiki>] 形式。</nowiki> | |||
パスワードを入力しても、以降のfossil remoteのURL表示などでは省略される。 | |||
===== sync ===== | |||
[https://fossil-scm.org/home/help?cmd=sync Fossil: Help: sync] | |||
fossil sync ?REMOTE? ?options? | |||
ローカルとリモートの変更を同期する。pull/pushを同時で行うイメージ。 | |||
==== Server ==== | |||
*ui | |||
* uv | |||
* server | |||
*setting | |||
*configuration | |||
===== unversioned uv ===== | |||
[https://fossil-scm.org/home/help?cmd=uv Fossil: Help: uv] | |||
fossil unversioned SUBCOMMAND ARGS... | |||
fossil uv SUBCOMMAND ARGS.. | |||
バージョン管理していないファイル (UVファイル) は、同期され、ダウンロード可能だが、履歴を保存しない成果物。Webページやビルド結果の配布などで役立つ。UVへの変更は永続的で、履歴保存していないので、復元不能。コマンド実行時は注意する。 | |||
* add <file>: 該当ファイルを追加または更新する。 | |||
* add <file> --as <uvfile>: 該当ファイルを追加または更新する。ローカルのファイル名とuvとして管理するファイル名を別にできる。 | |||
* edit <file>: 該当ファイルをテキストエディターで開いて修正する。 | |||
* sync [<url>] | |||
fossilのcommitなどは自動的に同期するが、uvは履歴保存していないので、sync実行時までは同期されない。 | |||
editはあるが、addでも更新できるので、基本はfossil uv addで更新して最後にsyncするだけだと思われる。addするとローカルの/uvに反映される。 | |||
===== configuration ===== | |||
[https://fossil-scm.org/home/help?cmd=configuration Fossil: Help: configuration] | |||
Web UIで行う設定の同期系コマンド。setup_configなどWeb UIで設定する設定は、fossil syncなどでは同期されず、fossil configurationで同期する模様。 | |||
===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=/file Fossil: Help: /file] | |||
*[https://fossil-scm.org/home/help?cmd=/whatis Fossil: Help: /whatis] | |||
パラメーター。 | |||
* ln | |||
** ln: 行番号を表示。 | |||
** ln=<n>: 行番号<n>をハイライト表示。 | |||
** ln=<m>-<n>: m-n行をハイライト表示。 | |||
** ln=<m>-<n>+<y>-<z>: m-n行とy-z行を強調表示。 | |||
* name=<name> filename=<name> fn=<name>: どれも同じ意味でファイル名かハッシュ。 | |||
* ci=<version>: 表示対象のバージョン。nameと組合せてファイルを特定。 | |||
* txt: 未成形ソーステキスト表示。 | |||
fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。 | |||
?txtを指定することでfossilのレンダーリングなしでtxtで表示する。wikiなどの元データの確認で使う。 | |||
==== dir ==== | |||
[https://fossil-scm.org/home/help?cmd=/dir Fossil: Help: /dir] | |||
[[https://fossil-scm.org/home/file?name=src/browse.c&ci=version-2.25&ln=400 Fossil: browse.c at version-2.25]] にあるように、大文字小文字を無視した以下のファイル名の内容を一覧で表示する。 | |||
/* If the directory contains a readme file, then display its content below | |||
** the list of files | |||
*/ | |||
db_prepare(&q, | |||
"SELECT x, u FROM localfiles" | |||
" WHERE x COLLATE nocase IN" | |||
" ('readme','readme.txt','readme.md','readme.wiki','readme.markdown'," | |||
" 'readme.html') ORDER BY x COLLATE uintnocase LIMIT 1;" | |||
); | |||
そのため、ディレクトリー内にはこれらのreadmeファイルを配置した方がよいだろう。 | |||
==== doc uv ==== | |||
* [https://fossil-scm.org/home/help?cmd=/doc Fossil: Help: /doc] | |||
* [https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv] | |||
/uv/FILE | |||
/doc/CHECKIN/FILE | |||
docもuvもやることはほぼ同じ。プロジェクト内の文書を表示する。/fileとも近い。 | |||
docのcheckinには以下も使える。 | |||
* | * tip: 最新のチェックイン。 | ||
* | * ckout: サーバーがチェックアウト内から実行されている場合、現在のチェックアウト。それ以外はtipと同じ。 | ||
* | * latest: ブランチの状態に関わらず最新チェックイン。 | ||
ckoutは開発のプレビュー用。ファイル拡張子でレンダリング方法が決まる。 | |||
==== download ==== | FILEが/で終わる場合、index.html index.wiki index.mdのファイルをこの順序で試す。見つからなければ、404.mdに置換して、それでもなければデフォルトの404画面 (CGIのnot-found?) を表示する。 | ||
ファイルのMIMEタイプがtext/x-fossil-wikiかtext/x-markdownならfossilのヘッダーとフッターを追加する。text/htmlの場合、html要素類を省いて、以下で始まる場合にヘッダー・フッターを提供する。 | |||
<nowiki><div class='fossil-doc' データタイトル='TEXT'></nowiki> | |||
プロジェクト直下にindex.mdを配置すると/doc/trunkで表示される。末尾の/があるとまずい模様。 | |||
====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で指定したホームページにリダイレクトするスタブページ。設定していないと、「''Empty Page''」とだけ表示される。 | |||
==== uv ==== | doc/trunk/wwwの埋め込み文書かwikiにリダイレクトさせるのがよいと思われる。埋め込み文書が望ましいだろう。 | ||
====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==== | ||
Web UIの設定類。ローカルのfossilリポジトリーはclone/pullなどではデフォルトでは取得しない模様。 | |||
fossil configuration pullなどで取得・同期する。 | |||
===== 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の初回アクセス時に表示される。 | ||
= | AREA=skinなど相当。 | ||
表示内容は [[https://fossil-scm.org/home/file?name=src/setup.c&ci=trunk Fossil: setup.c at trunk]] が元になっている。 | |||
[[ファイル:Fossil.gnusocial.jp fossil gnusocial setup config.png]] | [[ファイル:Fossil.gnusocial.jp fossil gnusocial setup config.png]] | ||
====== Items ====== | |||
以下の項目がある。 | 以下の項目がある。 | ||
{| class="wikitable" | {| class="wikitable" | ||
454行目: | 899行目: | ||
!RSS Property | !RSS Property | ||
!default | !default | ||
!AREA | |||
!説明 | !説明 | ||
|- | |- | ||
459行目: | 905行目: | ||
|project-name | |project-name | ||
| | | | ||
| | | | ||
|プロジェクト名。 | |||
|- | |- | ||
|Project Description | |Project Description | ||
|project-description | |project-description | ||
| | |||
| | | | ||
|プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。 | |プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。 | ||
468行目: | 916行目: | ||
|Canonical Server URL | |Canonical Server URL | ||
|email-url | |email-url | ||
| | |||
| | | | ||
|サーバーのURL。他のリポジトリーがcloneなどに使うURL。末尾の/は省略する。永続サーバーとして使わない場合は空白のままにする。https://fossil.gnusocial.jp/fossil/gnusocial<nowiki/>のようなプロジェクトホームのベース名が推奨値。 | |サーバーのURL。他のリポジトリーがcloneなどに使うURL。末尾の/は省略する。永続サーバーとして使わない場合は空白のままにする。https://fossil.gnusocial.jp/fossil/gnusocial<nowiki/>のようなプロジェクトホームのベース名が推奨値。 | ||
474行目: | 923行目: | ||
|short-project-name | |short-project-name | ||
|Project Name | |Project Name | ||
| | |||
|tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。 | |tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。 | ||
|- | |- | ||
|Download Tag | |Download Tag | ||
|download-tag | |download-tag | ||
|trunk | |trunk | ||
| | |||
|/downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。 | |/downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。 | ||
|- | |- | ||
484行目: | 935行目: | ||
|index-page | |index-page | ||
|/home | |/home | ||
| | |||
|Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。 | |Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。 | ||
|- | |- | ||
|Main Menu | |Main Menu | ||
|mainmenu | |||
| | | | ||
| | |skin | ||
|Web | |Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。 | ||
# メニュー表示用テキスト。 | |||
# クリック時のハイパーリンク。/開始はリポジトリールート。 | |||
# TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。 | |||
# メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示可能にできる。 | |||
|- | |- | ||
|Custom Sitemap Entries | |Custom Sitemap Entries | ||
|sitemap-extra | |sitemap-extra | ||
| | |||
| | | | ||
|/sitemapページの追加メニュー。 | |/sitemapページの追加メニュー。 | ||
500行目: | 959行目: | ||
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。 | [Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。 | ||
==== Empty Page ==== | ====== Main Menu ====== | ||
[Main Menu] の項目はサイト全体で目につく部分で重要に感じるので、詳説する。 | |||
初期値は以下になっている。 | |||
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])。 | |||
Fossil本体のMain Menu設定は以下になっている。 | |||
Home /doc/trunk/www/index.wiki * {} | |||
Timeline /timeline {o r j} {} | |||
Docs /doc/trunk/www/permutedindex.html * {} | |||
Code /dir?ci=trunk oh desktoponly | |||
Forum <nowiki>https://fossil-scm.org/forum/forum</nowiki> * {} | |||
To-Do /rptview/to-do {v s a} desktoponly | |||
Download /uv/download.html * desktoponly | |||
Setup /setup s desktoponly | |||
Download /download * {}などでダウンロードページでいいと思う。Fossilデフォルトだとdesktoponlyを指定しているが、そんなに横幅いらないので別に{}でいいと思う。 | |||
==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行目: | 1,010行目: | ||
設定が必要な模様。 | 設定が必要な模様。 | ||
'''解決方法''': | '''解決方法''': | ||
# 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行目: | 1,028行目: | ||
リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。 | リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。 | ||
=== 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行目: | 1,045行目: | ||
プロジェクトの初期ユーザー名とパスワードが表示される。ユーザー名は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行目: | 1,051行目: | ||
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行目: | 1,063行目: | ||
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行目: | 1,070行目: | ||
パスワードなしでのログインを実現したい場合、いくつかの方法がある。 | パスワードなしでのログインを実現したい場合、いくつかの方法がある。 | ||
# 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 | ||
==== Differences Between Setup and Admin Users ==== | |||
[https://fossil-scm.org/home/doc/trunk/www/caps/admin-v-setup.md Fossil: Differences Between Setup and Admin Users] | |||
===== Dangerous Capabilities Initially Denied to Everyone ===== | |||
2個の権限だけセットアップユーザーも含めてデフォルトで無効にしている。 | |||
====== Write Unversioned ====== | |||
セットアップユーザーや管理ユーザーでも不能にしている。必ず"y"の権限を付与する。自分で自分に付与してもいい。 | |||
Web UIの[Admin]-[Users]-<username>-[Capabilities]=[☑️Write Unversioned]-[Apply Changes] | |||
これでuvへのアップロード (Web UIの/uvやfossil uv sync) が有効になる。 | |||
===Wiki=== | |||
* [https://www.fossil-scm.org/home/doc/trunk/www/wikitheory.wiki Fossil: Wiki In 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===== | ||
==== | ==== Markup ==== | ||
[https://www.fossil-scm.org/home/md_rules Fossil: Markdown 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] | |||
==== TH1 Scripts ==== | Fossil WikiとMarkdownの2種類の記法が使える。ただし、コミットメッセージにはFossil wikiのみ。 | ||
Fossil Wikiは箇条書きにネストができなかったり、機能が乏しい。基本はHTMLを使う形になる。MarkdownかHTMLを使った方がたぶん便利。 | |||
====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] | ||
*[https://fossil-scm.org/home/wiki?name=Release+Build+How-To Fossil: Release Build How-To] | |||
FossilのDownload ([https://fossil-scm.org/home/uv/download.html Fossil: Downloads]) ページの仕組み。デフォルトではこのページはない。 | FossilのDownload ([https://fossil-scm.org/home/uv/download.html Fossil: Downloads]) ページの仕組み。デフォルトではこのページはない。 | ||
この画面はバージョン管理していないファイルで実装されている。配布物の格納ディレクトリーのファイルリスト/juuvlistをXMLHttpRequestで取得して、それを表示している。 | |||
ただし、ソースコードは/tarballや/zipで元々提供する機能があるので、それで提供している。 | |||
以下の手順で行う。 | 以下の手順で行う。 | ||
# | #fossil uv editでdownload.jsに新しいリリース用の情報を記入して、新しいバージョン番号を認識できるようにする。 | ||
# fossil uv addで配布用バイナリーを追加。 | #fossil uv addで配布用バイナリーを追加。 | ||
# fossil uv syncでpush | #fossil uv syncでpush | ||
古い配布物の削除手順。 | |||
# fossil uv editでdownload.jsの変数の該当項目を削除。 | |||
# fossil uv rmでuvから削除。 | |||
# fossil uv syndでpush | |||
y権限を持つユーザーのみuvをpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。 | |||
* [https://fossil-scm.org/home/doc/trunk/www/unvers.wiki Fossil: Unversioned Content] | JavaScriptを使って自動生成している。が、JavaScript依存がよろしくない。JavaScriptの生成結果を通常のHTMLでべたがきするのがいい気がする。 | ||
* [https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv] | |||
====Unversioned==== | |||
*[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=unversioned Fossil: Help: unversioned] | |||
*[https://fossil-scm.org/home/help?cmd=/uvlist Fossil: Help: /uvlist] | |||
*[https://fossil-scm.org/home/help?cmd=/juvlist Fossil: Help: /juvlist] | |||
*[https://fossil-scm.org/home/help?cmd=/uv Fossil: Help: /uv] | |||
*[https://fossil-scm.org/home/help?cmd=uv-sync Fossil: Help: uv-sync] | |||
===== Unversioned Content ===== | |||
*[https://fossil-scm.org/home/doc/trunk/www/unvers.wiki Fossil: Unversioned Content] | |||
リリース成果物などの格納用の機能。最新ファイルだけ保存する。 | |||
ビルド結果や頻繁に変更されるWebページなどの一時コンテンツの保存に便利。 | |||
====== Accessing Unversioned Files ====== | |||
チェックアウトには含まれておらず、/uv/<file name>でアクセスできる。ファイルの内容はfossil uv cat <file name>かfossil uv export <filename> で取得できる。 | |||
ファイル一覧は/uvlistで取得できる。 | |||
====== Syncing Unversioned Files ====== | |||
デフォルトではuvはリポジトリー缶で同期されない。以下のコマンドのいずれかの実行が必要。 | |||
fossil sync -u | |||
fossil clone -u URL local-repo-name | |||
fossil unversioned sync | |||
fossil uv syncはuvのみ同期する。それら以外のsync -uとclone -uはuv以外も同期する。 | |||
-uはsyncとcloneでのみ機能して、push/pullでは機能しない。uvは履歴がなく、同期を失敗すると破損して、危険なのでy権限がないと同期できない。それまでは追加できるが、同期はできない。 | |||
===== uvの一括保存 ===== | |||
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919 | |||
uvはリポジトリーにあるだけで、チェックインにはない。ファイルとして扱いたい場合、保存する必要がある。 | |||
手動でよければ、/uvか/uvlistにアクセスすればいい。 | |||
fossil uv listで一覧を取得して、fosssil uv catかexportでファイルに出力する。 | |||
一括で行いたければ組み合わせる。 | |||
fossil uv ls | while read file; do | |||
fossil uv export "$file" --to "./$file" | |||
done | |||
==== 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] | ||
=== Other === | |||
==== Skin ==== | |||
* [https://fossil-scm.org/home/doc/trunk/www/customskin.md Fossil: Skinning the Fossil Web Interface] | |||
* [https://fossil-scm.org/home/help?cmd=/setup_skin Fossil: Help: /setup_skin] | |||
* [https://fossil-scm.org/home/help?cmd=/setup_skin_admin Fossil: Help: /setup_skin_admin] | |||
* [https://fossil-scm.org/home/help?cmd=/setup_skinedit Fossil: Help: /setup_skinedit] | |||
* [https://fossil-scm.org/home/help?cmd=/skins Fossil: Help: /skins] | |||
* [https://fossil-scm.org/home/help?cmd=default-skin Fossil: Help: default-skin] | |||
* [https://fossil-scm.org/home/help?cmd=repolist-skin Fossil: Help: repolist-skin] | |||
===== /skins ===== | |||
Fossilの見た目をskinと呼んでいる。このSkinは/skinsにアクセスすることでユーザーごとに変更可能。内容はCookieで記憶していて、それで変更を維持する。 | |||
/fdscookieにアクセスすると、現在のスキンを確認できて、削除もできる。 | |||
===== 標準skin ===== | |||
[https://fossil-scm.org/home/dir?ci=version-2.25&name=skins Fossil: Files in skins/ of version-2.25] | |||
skinsディレクトリーがskinの格納場所。ここに標準skinもある。 | |||
===== default.css ===== | |||
[https://fossil-scm.org/home/file?name=src/default.css&ci=version-2.25 Fossil: default.css at version-2.25] | |||
FossilのUIの共通スタイル。 | |||
===== desktoponly sidebar wideonly ===== | |||
Main Menuなどで登場する画面幅の表示制御のスタイル。「[https://fossil-scm.org/home/file?name=src/default.css&ci=version-2.25 Fossil: default.css at version-2.25]」で定義。 | |||
/* Objects in the "desktoponly" class are invisible on mobile */ | |||
@media screen and (max-width: 600px) { | |||
.desktoponly { | |||
display: none; | |||
} | |||
} | |||
/* Float sidebars to the right of the main content only if there's room. */ | |||
@media screen and (min-width: 600px) { | |||
.sidebar { | |||
float: right; | |||
max-width: 33%; | |||
margin-left: 1em; | |||
} | |||
} | |||
/* Objects in the "wideonly" class are invisible only on wide-screen desktops */ | |||
@media screen and (max-width: 1200px) { | |||
.wideonly { | |||
display: none; | |||
} | |||
} |
2025年1月14日 (火) 07:27時点における最新版
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どうぞ。DVCS内にbug tracker, wiki, forum, technoteまで実装し、かつ各自がセルフホストサーバーとして稼働可能な相当に分散されたVCS。これに比べればgitはDを名乗るのもおこがましい。https://t.co/TK0Hg2rUFf
— 江添亮 (@EzoeRyou) September 6, 2018
Fossil Concepts
Adding Features To Fossil
Fossil: Adding Features To Fossil
Fossil Settings
fossil setingsかWeb UIの[Admin]-[Settings]からfossilの設定を変更できる。リポジトリー毎の設定。
Glossary
コマンドという概念がある。fossilのコマンドの引数に指定するサブコマンド。これがWebバージョンもある。Web版の場合/commandのように、URLの最後に/をつける模様。
Fossil vs Git
Fossil – Next Generation | Hacker News
Questions And Criticisms
Fossil: Questions And Criticisms
Contribution
Issue
Fossilのチケット「Fossil: Ticket Main Menu」はあるが、これは開発者の管理用になっている。
一般ユーザーがバグを見つけた場合、フォーラム (Fossil User Forum: Forum) で質問することになっている。
なお、fossil本体 [https://fossil-scm.org/home] とFossil User Forum [https://fossil-scm.org/forum/] は別サイトなので、/forumの方でユーザー登録が必要なので注意する。
Compiling and Installing Fossil
Fossil: Compiling and Installing Fossil
ソースコードの修正提案にあたり、Fossilを自前でビルドする。
./configure --prefix=~/.local/stow/fossil-latest make
以下のエラー。
ld: Undefined symbols: _libiconv, referenced from: _fossil_path_to_utf8 in utf8.o _libiconv_close, referenced from: _fossil_path_to_utf8 in utf8.o _libiconv_open, referenced from: _fossil_path_to_utf8 in utf8.o clang: error: linker command failed with exit code 1 (use -v to see invocation)
iconvがいる模様。
生成されたMakefileを以下のように修正してmake clean; make; make installするとうまくいった模様。
patch <<-'EOT'
--- Makefile.old 2025-01-06 07:23:21
+++ Makefile 2025-01-06 07:20:40
@@ -39,7 +39,7 @@
E =
TCC = cc
-
+TCC += -DWITHOUT_ICONV
#### Tcl shell for use in running the fossil testsuite. If you do not
# care about testing the end result, this can be blank.
#
EOT
Note
GitからFossiへの移行時の注意点。
デフォルトでシンボリックリンクを維持しない。
「Fossil: Help: allow-symlinks」
デフォルトでオフになっている。オンにする。後々問題になるので、シンボリックリンクをそもそもやめた方がいいかもしれない。
Issue
fossilを使っていて気になる動きがある。
/dirでindexの表示
/dirページはreadmeは一覧表示してくれる。一方、/uv /docはindexファイルを一覧表示する。
/dirページもreadmeがなければ、indexファイルを一覧表示してほしい
dirのSQL部分にindexを追加するだけでいけると思う。
/doc/trunk/でindex.md未表示
プロジェクト直下にindex.mdを設置。/doc/trunk/での表示を期待したが、/doc/trunkで表示。バグ?
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
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を表示するが以下の例外がある。
|
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はマージせず、ローカルの変更を上書きする。
updateはgit rebaseに近い。checkoutはgit reset --hard/git checkout -f相当。ローカルの変更を破棄したい場合に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もある。
Branch
Fossilでのブランチの扱いを整理する。
Create
情報源
以下の2コマンドでブランチを作成できる。
- commit --branch
- branch new
ブランチの作成は通常commit --branchでコミット時に作る。これはYAGNI原則に従ったもの。
branch newでコミットなしでブランチを作ることものできる。ただ、この方法は非推奨。以下のようにブランチ作成、ブランチ切り替え、コミットと3回コマンドが必要だから。
fossil branch new my-new-branch-name trunk fossil update my-new-branch-name fossil commit
commit --branchだと上記が1回で済む。
Switch
情報源
ブランチの切り替えは以下2コマンドで行う。
- update: autosyncオプションを尊重して、切り替え時にマージもする。git rebaseに近い。
- checkout: 自動同期せず、ローカルを上書きする。
Default branch
https://chatgpt.com/c/677efd9e-a904-800b-b2f8-c53d4881888b
fossilではリポジトリー作成時などはtrunkがデフォルトのブランチ名になる。
ただし、gitからインポートした場合などはtrunkがない。
fossilのtrunkブランチに必ずしも合わせる必要はない。が、特に理由がないなら、fossilの標準に合わせたほうがわかりやすい。
その場合、以下の手順でtrunkをデフォルトブランチに変更する。
# mainブランチをtrunkに改名 fossil rename main trunk
# デフォルトのブランチ設定を更新 fossil settings main-branch trunk
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には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回のコマンドで完了する設計になっているから。途中から再開する機能は直接はない。工夫が必要。
- gitリポジトリー側のコミットログをフィルターして必要な部分だけ残す。
- fossilに一部インポート済みの場合、インポート後の履歴をformat-patchでファイルに出力して、それをfossil patch applyで取り込む。
- 何回かに分けて、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のあるディレクトリーで管理しているので、複数のチェックアウトを展開できない。
Other
過去の履歴の削除
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
Fossilでは過去の履歴の削除は推奨されていない。
SQLiteのSQLで直接操作するか、gitに変換してgitで過去の履歴を削除してインポートし直す。
gitでやるほうが安全。ただし、変換時にfossil固有情報が消失する。
Git
gitの場合。
fossil export --git > export.git
fossil init newrepo.fossil
fossil import --git export.git
ただし、この方法はfossil固有の情報が消失する。例えば、以下。
- Fossilのユーザ名・権限
- Fossil特有のデータ (Wikiページ、uv)
対策がある。
- ユーザー名一覧を出力しておく。
- Wikiページは使わないようにして、埋め込み文書で管理する。
- uvファイル群も出力しておく。
SQLite
手順:
1 リポジトリをSQLiteで開く:
sqlite3 repo.fossil
2 対象コミットを特定: 問題のコミットIDをFossilのログなどで確認します。
fossil timeline
3 対象データを削除: 以下のSQLを実行して問題のデータを削除します(例としてファイルの削除)。
DELETE FROM blob WHERE rid = (対象のリビジョンID); DELETE FROM delta WHERE srcid = (対象のリビジョンID); DELETE FROM event WHERE objid = (対象のリビジョンID);
4 データベースを圧縮:
VACUUM;
5 整合性を確認:
fossil test-integrity
Deleting Content From Fossil
Fossil: Deleting Content From Fossil
Shunningという削除の仕組みがある模様。
Help
[Fossil: Help] にFossilのコマンド、Web UIページ、設定が一覧されている。
数が多いので特に重要なものを整理する。
Available commands:
Repository
- init/new
- clone
- open
- close
init/new
fossil new ?OPTIONS? FILENAME fossil init ?OPTIONS? FILENAME
- --template <repository>: リポジトリーから設定をコピーする。
-A|--admin-user
USERNAME: 管理ユーザー名を指定する。- --project-name: プロジェクト名。/setup_configでの設定?
- --project-desc: /setup_configの設定?
FILENAMEのファイル名でリポジトリーを作成する。cloneとは区別される。cloneは既存プロジェクトのコピーを作る。new/initは新規プロジェクトを作る。
デフォルトで、現在のログイン名を管理ユーザーに使う。-A|--admin-userで変更可能。
デフォルトで、全設定がデフォルト値で初期化される。既存リポジトリーを--templateで指定すれば、その値で上書き可能。
clone
fossil clone ?OPTIONS? URI ?FILENAME?
- -A|--admin-user <username>
- -u|--unversioned: uvも同期する。
- --workdir <dir>: デフォルトで<file name>相当。
URIで指定したリポジトリーのクローンを<file name>という名前のローカルファイルに作成する。<file name> が省略された場合、URIのパスの最後の要素から推測される。
URIは以下のいずれかの形式。
- HTTP/HTTPS protocol: http[s]://[userid[:password]@]host[:port][/path]
- SSH protocol: ssh://[userid@]host[:port]/path/to/repo.fossil[?fossil=path/fossil.exe]
- Filesystem: [file://]path/to/repo.fossil
For ssh and filesystem, path must have an extra leading '/' to use an absolute path.
このコマンドは--no-openを指定しない限り、同時にopen (チェックアウト=ファイル展開) もする。
デフォルトで、現在のログイン名をcloneの管理ユーザーとして使う。-A|--admin-userで上書き可能。
なお、fossilには--depth相当のシャロークローンはない。
「Fossil User Forum: Towards shallow cloning」にその説明がある。
Fossilはwikiなどのいろんな情報を持っており、シャロークローンした場合、そこの整合性の維持が難しくなるとのこと。まあ、それはそうだろう。
特定バージョンのファイルが欲しいだけなら、そのバイナリーをWebから取得すればいい。開発者ならcloneすればいい。
open
fossil open <repository> [<version>] [<options>]
- --repodir <dir>: <repository> がURIの場合、cloneの保存先<dir>。初期値は.。機能していないように見える。--workdirを使えばよさそう。
- --workdir <dir>: .の代わりに使う格納ディレクトリー。なければ作られる。
よく使う。repo.fossilのfossilリポジトリーに接続して、チェックインをローカルファイルに展開する。
<repository>にはURIも指定できる。最新ファイルだけや、特定バージョンだけ取得する場合にも使えそう。
cloneだと履歴全てを取得する。URIにはcloneと同じ形式が使える。
openすると、openしたディレクトリーに_FOSSIL_ (UNIX系OSだと.fslckout) ファイルが作成される。このファイルで、.fossil SQLiteファイルとディレクトリーを関連づけている。
close
openの反対。DBへの接続を終了する。未コミットの編集中のファイルがある場合、-fで強制終了が必要。closeすることで誤ってコミットすることがなくなる。
DB接続を終了するといっても、やることは実際にはopen中のディレクトリーないの_FOSSIL_(.fslckout) を削除するだけ。
closeは基本的に実行することはない。closeが必要な場面は限られている (https://chatgpt.com/c/6778f88d-c338-800b-a758-7c51de5856fa)。
- リポジトリーのコピーをファイル・テンプレートとして扱いたい場合: 例えば、ディレクトリー構造だけWebからコピーしてきたい場合などに便利。
- リポジトリーのコピーを別の用途に使いたい場合。
- 複数のバージョンをローカルに展開して、並行作業する場合。
openしているディレクトリーは、.fossilのリポジトリーの履歴保存対象となり、これは1個のディレクトリーとだけ関連づいている。これの切替用コマンド。
Information
- version
- info
- status
- changes
- diff
- timeline
- ls
- branch
- update
- checkout
- merge
- undo
- redo
Change
- add
- rm
- addremove
- mv/rename
- commit
commit/ci
fossil commit ?OPTIONS? ?FILE...? fossil ci ?OPTIONS? ?FILE...?
新しいバージョン (コミット) を作成する。-mでコメントテキストか、-Mでコメントファイルの指定がない限り、チェックインコメント用にエディターを開く。
mv/rename
fossil mv|rename OLDNAME NEWNAME fossil mv|rename OLDNAME... DIR
- --hard: チェックアウト内の実ファイルも操作する。
ファイルまたはディレクトリーを移動か改名する。
mvはディスク上のファイルの名前を変更したり移動しない。次のコミット時に、ファイル名が変更され太忠事実を記録するだけ。ただし、デフォルトの動作をオプションはmv-rm-file設定で上書き可能。
renameはオプションやmv-rm-filesがあってもディスク上のファイルに変更を加えない。
git mvを期待するなら、基本は--hardを使ったほうがいいだろう。
Recovery
- revert
- undo
- redo
revert
Usage: fossil revert ?OPTIONS? ?FILE ...?
- -r|--revision VERSION: Revert given FILE(s) back to given VERSION
Sharing
- push
- pull
- sync
- update
- remote
- remote-url
push
fossil push ?URL? ?options?
- -B|--httpauth <username>:<password>: HTTP認証の情報を指定する。
URLが未指定の場合、最後に使ったclone/push/pull/remote/syncのURLを流用する。
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
リモートサーバーにpushしたい場合、工夫が必要。
- pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。パスワードを省略してユーザー名だけ指定すれば、対話でパスワードを聞いてくるのでこれがいい。
- fossil remote-urlで認証情報付きのURLを設定。これも対話的になるのでいまいちだが、ユーザー名だけを指定すればOK。
- sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。
初回だけURLでプッシュして対話的に入力するのがいい気がするかな。
remote
fossil remote ?SUBCOMMAND ...?
- fossil remote scrub: 記憶したリモートURLのパスワードを忘れる。
- fossil remote URL: defaultのリモートURLを変更する。
リモートURLの管理用コマンド。git remoteに近い。fossil remote scrubでパスワードの消去と、fossil remote URLでURLにアカウント情報を入力する用途用 [https://username:password@domain/path] 形式。
パスワードを入力しても、以降のfossil remoteのURL表示などでは省略される。
sync
fossil sync ?REMOTE? ?options?
ローカルとリモートの変更を同期する。pull/pushを同時で行うイメージ。
Server
- ui
- uv
- server
- setting
- configuration
unversioned uv
fossil unversioned SUBCOMMAND ARGS... fossil uv SUBCOMMAND ARGS..
バージョン管理していないファイル (UVファイル) は、同期され、ダウンロード可能だが、履歴を保存しない成果物。Webページやビルド結果の配布などで役立つ。UVへの変更は永続的で、履歴保存していないので、復元不能。コマンド実行時は注意する。
- add <file>: 該当ファイルを追加または更新する。
- add <file> --as <uvfile>: 該当ファイルを追加または更新する。ローカルのファイル名とuvとして管理するファイル名を別にできる。
- edit <file>: 該当ファイルをテキストエディターで開いて修正する。
- sync [<url>]
fossilのcommitなどは自動的に同期するが、uvは履歴保存していないので、sync実行時までは同期されない。
editはあるが、addでも更新できるので、基本はfossil uv addで更新して最後にsyncするだけだと思われる。addするとローカルの/uvに反映される。
configuration
Web UIで行う設定の同期系コマンド。setup_configなどWeb UIで設定する設定は、fossil syncなどでは同期されず、fossil configurationで同期する模様。
Available web UI pages:
FossilのWeb UIページ。リポジトリーに対して/<page>の形式でアクセスする。ページ毎に?のクエリーパラメーターを受け付けるものがある。
artifact file whatis
パラメーター。
- ln
- ln: 行番号を表示。
- ln=<n>: 行番号<n>をハイライト表示。
- ln=<m>-<n>: m-n行をハイライト表示。
- ln=<m>-<n>+<y>-<z>: m-n行とy-z行を強調表示。
- name=<name> filename=<name> fn=<name>: どれも同じ意味でファイル名かハッシュ。
- ci=<version>: 表示対象のバージョン。nameと組合せてファイルを特定。
- txt: 未成形ソーステキスト表示。
fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。
?txtを指定することでfossilのレンダーリングなしでtxtで表示する。wikiなどの元データの確認で使う。
dir
[Fossil: browse.c at version-2.25] にあるように、大文字小文字を無視した以下のファイル名の内容を一覧で表示する。
/* If the directory contains a readme file, then display its content below ** the list of files */ db_prepare(&q, "SELECT x, u FROM localfiles" " WHERE x COLLATE nocase IN" " ('readme','readme.txt','readme.md','readme.wiki','readme.markdown'," " 'readme.html') ORDER BY x COLLATE uintnocase LIMIT 1;" );
そのため、ディレクトリー内にはこれらのreadmeファイルを配置した方がよいだろう。
doc uv
/uv/FILE /doc/CHECKIN/FILE
docもuvもやることはほぼ同じ。プロジェクト内の文書を表示する。/fileとも近い。
docのcheckinには以下も使える。
- tip: 最新のチェックイン。
- ckout: サーバーがチェックアウト内から実行されている場合、現在のチェックアウト。それ以外はtipと同じ。
- latest: ブランチの状態に関わらず最新チェックイン。
ckoutは開発のプレビュー用。ファイル拡張子でレンダリング方法が決まる。
FILEが/で終わる場合、index.html index.wiki index.mdのファイルをこの順序で試す。見つからなければ、404.mdに置換して、それでもなければデフォルトの404画面 (CGIのnot-found?) を表示する。
ファイルのMIMEタイプがtext/x-fossil-wikiかtext/x-markdownならfossilのヘッダーとフッターを追加する。text/htmlの場合、html要素類を省いて、以下で始まる場合にヘッダー・フッターを提供する。
<div class='fossil-doc' データタイトル='TEXT'>
プロジェクト直下にindex.mdを配置すると/doc/trunkで表示される。末尾の/があるとまずい模様。
download
最新ソースのtar玉とZIP提供の簡単なダウンロードページを提供する。
home index not_found
setup_configで指定したホームページにリダイレクトするスタブページ。設定していないと、「Empty Page」とだけ表示される。
doc/trunk/wwwの埋め込み文書かwikiにリダイレクトさせるのがよいと思われる。埋め込み文書が望ましいだろう。
uv
バージョン管理していないファイルを表示する。
sqlar tarball zip
指定したチェックインの該当アーカイブファイルを応答する。
setup
Web UIの設定類。ローカルのfossilリポジトリーはclone/pullなどではデフォルトでは取得しない模様。
fossil configuration pullなどで取得・同期する。
setup_config
Admin/Configurationページ。プロジェクト名などを設定できる。Homeの初回アクセス時に表示される。
AREA=skinなど相当。
表示内容は [Fossil: setup.c at trunk] が元になっている。
Items
以下の項目がある。
項目 | RSS Property | default | AREA | 説明 |
---|---|---|---|---|
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 | skin | Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。
| |
Custom Sitemap Entries | sitemap-extra | /sitemapページの追加メニュー。 |
[Project Name]/[Project Description]/[Tarball and Zip-archive Prefix] あたりを設定しておけば良いと思われる。
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。
Main Menu
[Main Menu] の項目はサイト全体で目につく部分で重要に感じるので、詳説する。
初期値は以下になっている。
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)。
Fossil本体のMain Menu設定は以下になっている。
Home /doc/trunk/www/index.wiki * {} Timeline /timeline {o r j} {} Docs /doc/trunk/www/permutedindex.html * {} Code /dir?ci=trunk oh desktoponly Forum https://fossil-scm.org/forum/forum * {} To-Do /rptview/to-do {v s a} desktoponly Download /uv/download.html * desktoponly Setup /setup s desktoponly
Download /download * {}などでダウンロードページでいいと思う。Fossilデフォルトだとdesktoponlyを指定しているが、そんなに横幅いらないので別に{}でいいと思う。
Web
FossilのWeb UI自体のマニュアルはない模様。画面内の説明で完結している模様。自分で使いながら整理する。
Home
/home にアクセスすると、初回は以下のように表示される。
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] と表示される。
設定が必要な模様。
解決方法:
- Webインターフェースでログインし、
/Setup
ページにアクセスします。 - 「Start Page」を設定します:
- 「Start Page」に表示したいWikiページの名前を指定します(例:
Home
)。 - Wikiページがまだない場合は、Wikiを作成してください。
- 「Start Page」に表示したいWikiページの名前を指定します(例:
Wikiページの作成方法:
/wiki
ページにアクセス。- 「新しいWikiページを作成」ボタンをクリック。
- ページ名(例:
Home
)と内容を入力し、保存します。
ただ、このWikiページの作成はちょっと考えたほうがいい。
リポジトリーのファイル内の文書を表示することができるので、そちらでやったほうがいい可能性がある。
Permission
- Fossil: Differences Between Setup and Admin Users
- Fossil: Administering User Capabilities (a.k.a. Permissions)
- Fossil: Help: user
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ではユーザーのパスワードを空にはできない。
パスワードなしでのログインを実現したい場合、いくつかの方法がある。
- HTTP Basic認証
- SSH鍵認証: ssh鍵でcloneしたらパスワード不要。
- Web UIでpublicアクセスを設定: Web UIの/setupに移動し、anonymouseかnobodyユーザーに権限を付与。
- 自動ログインCookie
Differences Between Setup and Admin Users
Fossil: Differences Between Setup and Admin Users
Dangerous Capabilities Initially Denied to Everyone
2個の権限だけセットアップユーザーも含めてデフォルトで無効にしている。
Write Unversioned
セットアップユーザーや管理ユーザーでも不能にしている。必ず"y"の権限を付与する。自分で自分に付与してもいい。
Web UIの[Admin]-[Users]-<username>-[Capabilities]=[☑️Write Unversioned]-[Apply Changes]
これでuvへのアップロード (Web UIの/uvやfossil uv sync) が有効になる。
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ブラウザーに直接配信される。
拡張子が.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
Markup
Fossil WikiとMarkdownの2種類の記法が使える。ただし、コミットメッセージにはFossil wikiのみ。
Fossil Wikiは箇条書きにネストができなかったり、機能が乏しい。基本はHTMLを使う形になる。MarkdownかHTMLを使った方がたぶん便利。
TH1 Scripts
Content
How The Fossil Download Page Works
FossilのDownload (Fossil: Downloads) ページの仕組み。デフォルトではこのページはない。
この画面はバージョン管理していないファイルで実装されている。配布物の格納ディレクトリーのファイルリスト/juuvlistをXMLHttpRequestで取得して、それを表示している。
ただし、ソースコードは/tarballや/zipで元々提供する機能があるので、それで提供している。
以下の手順で行う。
- fossil uv editでdownload.jsに新しいリリース用の情報を記入して、新しいバージョン番号を認識できるようにする。
- fossil uv addで配布用バイナリーを追加。
- fossil uv syncでpush
古い配布物の削除手順。
- fossil uv editでdownload.jsの変数の該当項目を削除。
- fossil uv rmでuvから削除。
- fossil uv syndでpush
y権限を持つユーザーのみuvをpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。
JavaScriptを使って自動生成している。が、JavaScript依存がよろしくない。JavaScriptの生成結果を通常のHTMLでべたがきするのがいい気がする。
Unversioned
- Fossil: Unversioned Content
- Fossil: Help: uv Fossil: Help: unversioned
- Fossil: Help: /uvlist
- Fossil: Help: /juvlist
- Fossil: Help: /uv
- Fossil: Help: uv-sync
Unversioned Content
リリース成果物などの格納用の機能。最新ファイルだけ保存する。
ビルド結果や頻繁に変更されるWebページなどの一時コンテンツの保存に便利。
Accessing Unversioned Files
チェックアウトには含まれておらず、/uv/<file name>でアクセスできる。ファイルの内容はfossil uv cat <file name>かfossil uv export <filename> で取得できる。
ファイル一覧は/uvlistで取得できる。
Syncing Unversioned Files
デフォルトではuvはリポジトリー缶で同期されない。以下のコマンドのいずれかの実行が必要。
fossil sync -u fossil clone -u URL local-repo-name fossil unversioned sync
fossil uv syncはuvのみ同期する。それら以外のsync -uとclone -uはuv以外も同期する。
-uはsyncとcloneでのみ機能して、push/pullでは機能しない。uvは履歴がなく、同期を失敗すると破損して、危険なのでy権限がないと同期できない。それまでは追加できるが、同期はできない。
uvの一括保存
https://chatgpt.com/c/6773b1e5-c1a0-800b-b7c4-92c081731919
uvはリポジトリーにあるだけで、チェックインにはない。ファイルとして扱いたい場合、保存する必要がある。
手動でよければ、/uvか/uvlistにアクセスすればいい。
fossil uv listで一覧を取得して、fosssil uv catかexportでファイルに出力する。
一括で行いたければ組み合わせる。
fossil uv ls | while read file; do fossil uv export "$file" --to "./$file" done
Image Format vs Fossil Repo Size
Fossil: Image Format vs Fossil Repo Size
Other
Skin
- Fossil: Skinning the Fossil Web Interface
- Fossil: Help: /setup_skin
- Fossil: Help: /setup_skin_admin
- Fossil: Help: /setup_skinedit
- Fossil: Help: /skins
- Fossil: Help: default-skin
- Fossil: Help: repolist-skin
/skins
Fossilの見た目をskinと呼んでいる。このSkinは/skinsにアクセスすることでユーザーごとに変更可能。内容はCookieで記憶していて、それで変更を維持する。
/fdscookieにアクセスすると、現在のスキンを確認できて、削除もできる。
標準skin
Fossil: Files in skins/ of version-2.25
skinsディレクトリーがskinの格納場所。ここに標準skinもある。
default.css
Fossil: default.css at version-2.25
FossilのUIの共通スタイル。
desktoponly sidebar wideonly
Main Menuなどで登場する画面幅の表示制御のスタイル。「Fossil: default.css at version-2.25」で定義。
/* Objects in the "desktoponly" class are invisible on mobile */ @media screen and (max-width: 600px) { .desktoponly { display: none; } } /* Float sidebars to the right of the main content only if there's room. */ @media screen and (min-width: 600px) { .sidebar { float: right; max-width: 33%; margin-left: 1em; } } /* Objects in the "wideonly" class are invisible only on wide-screen desktops */ @media screen and (max-width: 1200px) { .wideonly { display: none; } }