「Fossil」の版間の差分

提供:senooken JP Wiki
(remote)
(Recovery)
 
(同じ利用者による、間の27版が非表示)
39行目: 39行目:


コマンドという概念がある。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ファイルを一覧表示してほしい
dirのSQL部分にindexを追加するだけでいけると思う。
=== /doc/trunk/でindex.md未表示 ===
プロジェクト直下にindex.mdを設置。/doc/trunk/での表示を期待したが、/doc/trunkで表示。バグ?


==Install==
==Install==
229行目: 299行目:
  fossil checkout
  fossil checkout
updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。
updateはローカルの変更を対象バージョンにマージする。checkoutはマージせず、ローカルの変更を上書きする。
updateはgit rebaseに近い。checkoutはgit reset --hard/git checkout -f相当。ローカルの変更を破棄したい場合にcheckoutを使う。


====Making and Committing Changes====
====Making and Committing Changes====
268行目: 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]


428行目: 549行目:
'''5 整合性を確認''':
'''5 整合性を確認''':
  fossil test-integrity
  fossil test-integrity
===== Deleting Content From Fossil =====
[https://fossil-scm.org/home/doc/trunk/www/shunning.wiki Fossil: Deleting Content From Fossil]
Shunningという削除の仕組みがある模様。


==Help==
==Help==
485行目: 611行目:


デフォルトで、現在のログイン名をcloneの管理ユーザーとして使う。-A|--admin-userで上書き可能。
デフォルトで、現在のログイン名をcloneの管理ユーザーとして使う。-A|--admin-userで上書き可能。
なお、fossilには--depth相当のシャロークローンはない。
「[https://fossil-scm.org/forum/forumpost/587041dc81 Fossil User Forum: Towards shallow cloning]」にその説明がある。
Fossilはwikiなどのいろんな情報を持っており、シャロークローンした場合、そこの整合性の維持が難しくなるとのこと。まあ、それはそうだろう。
特定バージョンのファイルが欲しいだけなら、そのバイナリーをWebから取得すればいい。開発者ならcloneすればいい。


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


よく使う。repo.fossilのfossilリポジトリーに接続して、チェックインをローカルファイルに展開する。
* [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>]
  fossil open <repository> [<version>] [<options>]


* --repodir <dir>: <repository> がURIの場合、cloneの保存先<dir>。初期値は.
* --repodir <dir>: <repository> がURIの場合、cloneの保存先<dir>。初期値は.。機能していないように見える。--workdirを使えばよさそう。
* --workdir <dir>: .の代わりに使う格納ディレクトリー。なければ作られる。
* --workdir <dir>: .の代わりに使う格納ディレクトリー。なければ作られる。
よく使う。repo.fossilのfossilリポジトリーに接続して、チェックインをローカルファイルに展開する。


<repository>にはURIも指定できる。最新ファイルだけや、特定バージョンだけ取得する場合にも使えそう。
<repository>にはURIも指定できる。最新ファイルだけや、特定バージョンだけ取得する場合にも使えそう。


cloneだと履歴全てを取得する。URIにはcloneと同じ形式が使える。
cloneだと履歴全てを取得する。URIにはcloneと同じ形式が使える。
openすると、openしたディレクトリーに_FOSSIL_ (UNIX系OSだと.fslckout) ファイルが作成される。このファイルで、.fossil SQLiteファイルとディレクトリーを関連づけている。


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


openの反対。DBへの接続を終了する。未コミットの編集中のファイルがある場合、-fで強制終了が必要。
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 ====
==== Information ====
525行目: 675行目:
* rm
* rm
* addremove
* addremove
* mv/rename


*commit
*commit
536行目: 687行目:
  fossil ci ?OPTIONS? ?FILE...?
  fossil ci ?OPTIONS? ?FILE...?
新しいバージョン (コミット) を作成する。-mでコメントテキストか、-Mでコメントファイルの指定がない限り、チェックインコメント用にエディターを開く。
新しいバージョン (コミット) を作成する。-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 ====
==== Sharing ====
558行目: 736行目:
リモートサーバーにpushしたい場合、工夫が必要。
リモートサーバーにpushしたい場合、工夫が必要。


# pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。
# pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。パスワードを省略してユーザー名だけ指定すれば、対話でパスワードを聞いてくるのでこれがいい。
# 認証情報を対話入力 (例: fossil push URL)。URLだけ指定すると、認証情報を聞いてくるのでこれで入力する。
# fossil remote-urlで認証情報付きのURLを設定。これも対話的になるのでいまいちだが、ユーザー名だけを指定すればOK。
# fossil remote-urlで認証情報を設定。これも対話的になるのでいまいち?
# sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。
# sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。


578行目: 755行目:


パスワードを入力しても、以降のfossil remoteのURL表示などでは省略される。
パスワードを入力しても、以降のfossil remoteのURL表示などでは省略される。
===== sync =====
[https://fossil-scm.org/home/help?cmd=sync Fossil: Help: sync]
fossil sync ?REMOTE? ?options?
ローカルとリモートの変更を同期する。pull/pushを同時で行うイメージ。


==== Server ====
==== Server ====
*server
*ui
*ui
* setting
* 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:===
===Available web UI pages:===
595行目: 797行目:
*[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で表示する。
パラメーター。
 
* 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は開発のプレビュー用。ファイル拡張子でレンダリング方法が決まる。
 
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====
====download====
606行目: 859行目:
*[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で指定したホームページにリダイレクトするスタブページ。設定していないと、「''Empty Page''」とだけ表示される。
 
doc/trunk/wwwの埋め込み文書かwikiにリダイレクトさせるのがよいと思われる。埋め込み文書が望ましいだろう。


====uv====
====uv====
622行目: 877行目:


====setup====
====setup====
Web UIの設定類。ローカルのfossilリポジトリーはclone/pullなどではデフォルトでは取得しない模様。
fossil configuration pullなどで取得・同期する。


=====setup_config=====
=====setup_config=====
627行目: 885行目:


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"
636行目: 899行目:
!RSS Property
!RSS Property
!default
!default
!AREA
!説明
!説明
|-
|-
641行目: 905行目:
|project-name
|project-name
|
|
|プロジェクト名
|
|プロジェクト名。
|-
|-
|Project Description
|Project Description
|project-description
|project-description
|
|
|
|プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。
|プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。
650行目: 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/>のようなプロジェクトホームのベース名が推奨値。
656行目: 923行目:
|short-project-name
|short-project-name
|Project Name
|Project Name
|
|tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。
|tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。
|-
|-
661行目: 929行目:
|download-tag
|download-tag
|trunk
|trunk
|
|/downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。
|/downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。
|-
|-
666行目: 935行目:
|index-page
|index-page
|/home
|/home
|
|Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。
|Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。
|-
|-
671行目: 941行目:
|mainmenu
|mainmenu
|
|
|skin
|Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。
|Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。


676行目: 947行目:
# クリック時のハイパーリンク。/開始はリポジトリールート。
# クリック時のハイパーリンク。/開始はリポジトリールート。
# TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。
# TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。
# メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示できる。
# メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示可能にできる。
|-
|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        *              {}
  Home      /home        *              {}
  Timeline  /timeline    {o r j}        {}
  Timeline  /timeline    {o r j}        {}
693行目: 977行目:
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])。
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 * {}などでダウンロードページでいいと思う。
Fossil本体のMain Menu設定は以下になっている。
|-
Home      /doc/trunk/www/index.wiki          *       {}
|Custom Sitemap Entries
Timeline  /timeline                          {o r j}  {}
|sitemap-extra
Docs      /doc/trunk/www/permutedindex.html  *        {}
|
Code      /dir?ci=trunk                      oh      desktoponly
|/sitemapページの追加メニュー。
Forum    <nowiki>https://fossil-scm.org/forum/forum</nowiki> *        {}
|}
To-Do    /rptview/to-do                    {v s a} desktoponly
[Project Name]/[Project Description]/[Tarball and Zip-archive Prefix] あたりを設定しておけば良いと思われる。
Download  /uv/download.html                  *        desktoponly
 
Setup    /setup                            s        desktoponly
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。
Download /download * {}などでダウンロードページでいいと思う。Fossilデフォルトだとdesktoponlyを指定しているが、そんなに横幅いらないので別に{}でいいと思う。


==Web==
==Web==
790行目: 1,074行目:
#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===
===Wiki===
843行目: 1,140行目:
=====3.0 Examples=====
=====3.0 Examples=====


====Wiki Formatting Rules====
==== Markup ====
[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]
 
Fossil WikiとMarkdownの2種類の記法が使える。ただし、コミットメッセージにはFossil wikiのみ。


[https://www.fossil-scm.org/home/md_rules Fossil: Markdown Formatting Rules]
Fossil Wikiは箇条書きにネストができなかったり、機能が乏しい。基本はHTMLを使う形になる。MarkdownかHTMLを使った方がたぶん便利。


====TH1 Scripts====
====TH1 Scripts====
877行目: 1,178行目:


y権限を持つユーザーのみuvをpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。
y権限を持つユーザーのみuvをpush可能。権限者を最小にして不正なバイナリーの混入を予防できる。
JavaScriptを使って自動生成している。が、JavaScript依存がよろしくない。JavaScriptの生成結果を通常のHTMLでべたがきするのがいい気がする。


====Unversioned====
====Unversioned====
929行目: 1,232行目:


==== Skin ====
==== Skin ====
[https://fossil-scm.org/home/doc/trunk/www/customskin.md Fossil: Skinning the Fossil Web Interface]
 
* [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 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の最後に/をつける模様。

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

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はマージせず、ローカルの変更を上書きする。

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: 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のあるディレクトリーで管理しているので、複数のチェックアウトを展開できない。

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: 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相当のシャロークローンはない。

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

Fossil: Help: close

openの反対。DBへの接続を終了する。未コミットの編集中のファイルがある場合、-fで強制終了が必要。closeすることで誤ってコミットすることがなくなる。

DB接続を終了するといっても、やることは実際にはopen中のディレクトリーないの_FOSSIL_(.fslckout) を削除するだけ。

closeは基本的に実行することはない。closeが必要な場面は限られている (https://chatgpt.com/c/6778f88d-c338-800b-a758-7c51de5856fa)。

  1. リポジトリーのコピーをファイル・テンプレートとして扱いたい場合: 例えば、ディレクトリー構造だけWebからコピーしてきたい場合などに便利。
  2. リポジトリーのコピーを別の用途に使いたい場合。
  3. 複数のバージョンをローカルに展開して、並行作業する場合。

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: 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

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

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したい場合、工夫が必要。

  1. pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。パスワードを省略してユーザー名だけ指定すれば、対話でパスワードを聞いてくるのでこれがいい。
  2. fossil remote-urlで認証情報付きのURLを設定。これも対話的になるのでいまいちだが、ユーザー名だけを指定すればOK。
  3. 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: Help: sync

fossil sync ?REMOTE? ?options?

ローカルとリモートの変更を同期する。pull/pushを同時で行うイメージ。

Server

  • ui
  • uv
  • server
  • setting
  • configuration
unversioned 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

Fossil: Help: 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: Help: /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

Fossil: Help: /download

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

home index not_found

setup_configで指定したホームページにリダイレクトするスタブページ。設定していないと、「Empty Page」とだけ表示される。

doc/trunk/wwwの埋め込み文書かwikiにリダイレクトさせるのがよいと思われる。埋め込み文書が望ましいだろう。

uv

Fossil: Help: /uv

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

sqlar tarball zip

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

setup

Web UIの設定類。ローカルのfossilリポジトリーはclone/pullなどではデフォルトでは取得しない模様。

fossil configuration pullなどで取得・同期する。

setup_config

Fossil: Help: /setup_config

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

AREA=skinなど相当。

表示内容は [Fossil: setup.c at trunk] が元になっている。

Fossil.gnusocial.jp fossil gnusocial setup config.png

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個のメニューを定義する。
  1. メニュー表示用テキスト。
  2. クリック時のハイパーリンク。/開始はリポジトリールート。
  3. TH1 capexprコマンドの引数。trueの場合にエントリー表示。*は常にtrue。{}は常にfalse。
  4. メニュー項目に適用する追加のクラス名リスト。一部のスキンは、desktoponlyとwideonlyを使用して幅が広い場合のみ表示可能にできる。
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 にアクセスすると、初回は以下のように表示される。

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

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ブラウザーに直接配信される。
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

Markup

Fossil WikiとMarkdownの2種類の記法が使える。ただし、コミットメッセージにはFossil wikiのみ。

Fossil Wikiは箇条書きにネストができなかったり、機能が乏しい。基本はHTMLを使う形になる。MarkdownかHTMLを使った方がたぶん便利。

TH1 Scripts

Fossil: TH1 Scripts

Content

How The Fossil Download Page Works

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

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

ただし、ソースコードは/tarballや/zipで元々提供する機能があるので、それで提供している。

以下の手順で行う。

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

古い配布物の削除手順。

  1. fossil uv editでdownload.jsの変数の該当項目を削除。
  2. fossil uv rmでuvから削除。
  3. fossil uv syndでpush

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

JavaScriptを使って自動生成している。が、JavaScript依存がよろしくない。JavaScriptの生成結果を通常のHTMLでべたがきするのがいい気がする。

Unversioned

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

/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;
  }
}