「Fossil」の版間の差分
(remote) |
(sync) |
||
485行目: | 485行目: | ||
デフォルトで、現在のログイン名を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 ===== | ||
492行目: | 500行目: | ||
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>: .の代わりに使う格納ディレクトリー。なければ作られる。 | ||
558行目: | 566行目: | ||
リモートサーバーにpushしたい場合、工夫が必要。 | リモートサーバーにpushしたい場合、工夫が必要。 | ||
# pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) | # pushのURLを指定してユーザー名・パスワードを指定 (例: fossil push https://username:password@server/repo) 。この方法はコマンド履歴に認証情報が残るため控えた方がいい。パスワードを省略してユーザー名だけ指定すれば、対話でパスワードを聞いてくるのでこれがいい。 | ||
# fossil remote-urlで認証情報付きのURLを設定。これも対話的になるのでいまいちだが、ユーザー名だけを指定すればOK。 | |||
# fossil remote- | |||
# sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。 | # sshを設定してサーバーに登録して、URLをsshにする。安全だが手間。 | ||
578行目: | 585行目: | ||
パスワードを入力しても、以降の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 ==== |
2025年1月3日 (金) 11:23時点における版
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の最後に/をつける模様。
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はマージせず、ローカルの変更を上書きする。
Making and Committing Changes
以下のコマンドでファイルの追加・削除ができる。
fossil add file... fossil rm file... fossil addremove file...
以下のコマンドで前回コミットからの変更点の概要を表示する。
fossil changes
正確な差分はfossil diffで表示できる。
fossil diff
fossil difは現在のツリーと最後に変更をコミット時の差分を表示する。コミットしていない場合、最新コミットの差分を表示する。
他のユーザーの変更の確認にはfossil timelineを実行し、コミットを見つけて、diffを実行する。実行する。
fossil timeline
2021-03-28 03:18:54 [ad75dfa4a0] *CURRENT* Added details to frobnicate command (user: user-one tags: trunk) 2021-03-27 23:58:05 [ab975c6632] Update README.md. (user: user-two tags: trunk)
fossil diff --from current --to ab975c6632
ローカルの変更のコミットはcommitで行う。
fossil commit
VISUALかEDITOR環境変数で指定されたエディターでコメントの入力を要請される。
リモートリポジトリーからクローンしている場合、デフォルトで自動同期モードになっているので自動的にリモートにも同期する。
Branching And Merging
新しいブランチの開始には、commit --branchを実行する。Fossilではブランチはコミット時に作成する。ただ、必要に応じてコミット前にbranch newでも作成できる。
2個のブランチのマージには、まずマージ先のブランチを更新する。その後、組み込む他のブランチをマージする。例えば、trunkにfeatureXをマージするにはイアkのようにする。
fossil update trunk fossil merge featureX # make sure the merge didn't break anything... fossil commit
マージがうまくいかなかったりしたら、以下のコマンドで復元できる。
fossil undo
redoもある。
Branching, Forking, Merging, and Tagging
Fossil: Branching, Forking, Merging, and Tagging
一つの親コミットに対して、複数のコミットが派生して並列することをフォークと呼んでいる。それとは別でブランチというのがある。Fossilの内部的にはどちらも同じ。違いは、人間に意図があるか。ブランチは名前のついたフォークという扱い。
特定の機能の開発などで、完了するまで本流とは別で進めたい場合に使う。
fossilでブランチの作成には2の方法がある。
1個目はcommit --branch。ほとんどの場合に推奨される。最初のコミット作成時にブランチも作る。
fossil commit --branch my-new-branch-name
2番目はbranch new。
fossil branch new my-new-branch-name trunk fossil update my-new-branch-name fossil commit
この方法は手順が多いし、YAGNI原則に反するのでお勧めされない。
trunkという名前のブランチは、fossilのデフォルトブランチ名。
ローカルチェックアウトがブランチの場合、以下のコマンドで単純にtrunkにマージできる。
fossil merge
自動的に検知してくれる。
Get
基本的な使用方法
# clone fossil clone <repository url> # sync: cloneの再開など。 fossil sync -R <repository url> # rebuild: 取得後のDB再構築。 fossil rebuild <repository path>
上記コマンドでファイルを取得する。Fossilは1ファイルで管理するので、cloneだと取得しきれない可能性がある。中断した場合などはsyncで再取得する。再取得後、反映されない場合、rebuildで取得データからDBを再構築する。
Empty
fossilをcloneすると空で、Web UIで [cannot resolve name: trunk] と表示されることがある。これは、リポジトリーのクローンが失敗している。
以下のコマンドでデータ取得を継続する。
fossile sync -R <repositor url>
これでもダメなら、以下のコマンドでDBを再構築する。
fossile rebuild <repository path>
これで解決した。
Import And Export
Fossilには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
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
よく使う。repo.fossilのfossilリポジトリーに接続して、チェックインをローカルファイルに展開する。
fossil open <repository> [<version>] [<options>]
- --repodir <dir>: <repository> がURIの場合、cloneの保存先<dir>。初期値は.。機能していないように見える。--workdirを使えばよさそう。
- --workdir <dir>: .の代わりに使う格納ディレクトリー。なければ作られる。
<repository>にはURIも指定できる。最新ファイルだけや、特定バージョンだけ取得する場合にも使えそう。
cloneだと履歴全てを取得する。URIにはcloneと同じ形式が使える。
close
openの反対。DBへの接続を終了する。未コミットの編集中のファイルがある場合、-fで強制終了が必要。
Information
- version
- info
- status
- changes
- diff
- timeline
- ls
- branch
- update
- checkout
- merge
- undo
- redo
Change
- add
- rm
- addremove
- commit
commit/ci
fossil commit ?OPTIONS? ?FILE...? fossil ci ?OPTIONS? ?FILE...?
新しいバージョン (コミット) を作成する。-mでコメントテキストか、-Mでコメントファイルの指定がない限り、チェックインコメント用にエディターを開く。
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
- server
- ui
- setting
Available web UI pages:
FossilのWeb UIページ。リポジトリーに対して/<page>の形式でアクセスする。ページ毎に?のクエリーパラメーターを受け付けるものがある。
artifact file whatis
fileが特に重要。[Code]タブからファイルをクリックした際に使用する。ファイルの中身を表示する。?txtを指定することでfossilのレンダーリングなしでtxtで表示する。
download
最新ソースのtar玉とZIP提供の簡単なダウンロードページを提供する。
home index not_found
setup_configで指定したホームページにリダイレクトするスタブページ。
uv
バージョン管理していないファイルを表示する。
sqlar tarball zip
指定したチェックインの該当アーカイブファイルを応答する。
setup
setup_config
Admin/Configurationページ。プロジェクト名などを設定できる。Homeの初回アクセス時に表示される。
以下の項目がある。
項目 | RSS Property | default | 説明 |
---|---|---|---|
Project Name | project-name | プロジェクト名 | |
Project Description | project-description | プロジェクト説明。ページヘッダーや検索エンジンなどに使われる。 | |
Canonical Server URL | email-url | サーバーのURL。他のリポジトリーがcloneなどに使うURL。末尾の/は省略する。永続サーバーとして使わない場合は空白のままにする。https://fossil.gnusocial.jp/fossil/gnusocialのようなプロジェクトホームのベース名が推奨値。 | |
Tarball and Zip-archive Prefix | short-project-name | Project Name | tar玉かZIPアーカイブ生成時の名前の接頭辞。/\のような特殊文字は避けたほうがいい。 |
Download Tag | download-tag | trunk | /downloadページはプロジェクトのZIPかtarファイルの提供場所として設計されている。デフォルトで、trunkチェックインを提供する。ブランチを変更したければ変更する。 |
Index Page | index-page | /home | Homeメニュー選択時の表示パス名。リダイレクトループなどの回避のために/始まりであること。 |
Main Menu | mainmenu | Web UIのメインメニューの項目。TCLリスト (スペース区切りCSV?) で定義。以下の4列で1個のメニューを定義する。
初期値は以下。 Home /home * {} Timeline /timeline {o r j} {} Files /dir?ci=tip oh desktoponly Branches /brlist o wideonly Tags /taglist o wideonly Forum /forum {@2 3 4 5 6} wideonly Chat /chat C wideonly Tickets /ticket r wideonly Wiki /wiki j wideonly Admin /setup {a s} desktoponly Logout /logout L wideonly Login /login !L wideonly capexprの詳細 (Fossil: TH1 Scripts)。権限を意味する文字列 (Fossil: User Capability Reference)。 Download /download * {}などでダウンロードページでいいと思う。 | |
Custom Sitemap Entries | sitemap-extra | /sitemapページの追加メニュー。 |
[Project Name]/[Project Description]/[Tarball and Zip-archive Prefix] あたりを設定しておけば良いと思われる。
[Canonical Server URL] はなくてもcloneなどはできる。メール用?よくわからない。必要なタイミングで設定する。
Web
FossilのWeb UI自体のマニュアルはない模様。画面内の説明で完結している模様。自分で使いながら整理する。
Home
/home にアクセスすると、初回は以下のように表示される。
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
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
Wiki Formatting Rules
Fossil: Markdown Formatting Rules
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可能。権限者を最小にして不正なバイナリーの混入を予防できる。
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