プログラミング
GitからFossilへ
From Git to Fossil (lucio.albenga.es)
要約
Rust言語の採用を強制しようとする動きに反発した著者が、個人プロジェクトのためにGitの代替となるバージョン管理システムを探した結果、Fossilにたどり着いた経緯が語られています。FossilはC言語で書かれており、軽量で自己ホスト型のWebサーバー機能を持つ点が評価されています。記事では、GitリポジトリからFossilへの移行手順と、Fossilサーバーのセットアップ方法についても解説しています。
全文翻訳
GitからFossilへGitの人々が、Rustプログラミング言語を必須にする提案に着手しました。私はRustが好きではなく、何よりも、何十年も機能してきたプロジェクトを書き直し、ソーシャルメディアで扇動し、全体主義的な妄想を持つどんな小さなグループにも値する他の素晴らしい宝石を行うことによって、皆にそのクソを飲み込ませようとしている過激派の小さなコミュニティが特に好きではありません。だからこそ、プロジェクトがCからRustへの使用または切り替えを「強制する」ことを目指しているのを見ると、私は指輪物語のバルログに鞭で追われているかのように、可能な限りそこから逃げます。私はRCS(Revision Control System)、CVS(Concurrent Version System)、SVN(Subversion)、HG(Mercurial)、BZR(Bazaar)、そして前述のGitなど、多くのバージョン管理システムを使用した(またはテストした)経験がありますが、再び切り替えることに問題はないため、個人のプロジェクトのためにGitの代替を考え始めました。選択肢は、以前知っていたものに戻るか、何か別のものを探すかでしたが、Fossilを思い出しました。ソースコードを調べ、公式ドキュメント2を読んで、その機能、依存関係、インストールと設定方法などを学び始めました。そして、私が気に入っている多くのものがあることに気づきました。それはC言語で書かれており(Web機能には一部jsとtclを使用していますが)、小さくて効率的なプログラムで、ハードウェアリソースをほとんど消費しません。使い方が簡単で、より自然に感じられます(少なくともSubversionのような他のシステムを知っている人にとっては)、ステージングエリアのような過剰な機能が含まれていないためです。これはLinuxカーネルのような大規模で複雑なプロジェクトには役立つかもしれませんが、私には実用的な用途がありません。すでに準備されているため、自分でサーバーを迅速かつ簡単にセルフホストできます。実際、バージョン管理ビュー、Wiki、チケットなどを持つWebサーバーとWebインターフェースがあります。一方、GitではGitLab、Gitea、Forgejoのような外部ソフトウェアを使用する必要があり、それらのそれぞれが少なくとも1つの追加ソフトウェア依存関係です。コミットメッセージはメールアドレスを使用せず、ユーザー名を使用するため、公開リポジトリがある場合、スパムを心配する必要はなく、この用途のためだけに特定のメールアドレスを必要としません。Gitとの相互運用性があります。つまり、リポジトリをGitに戻す必要がある場合でも可能であり、FossilリポジトリとGit3リポジトリ間の双方向同期もサポートしています(これはFossilとSqliteプロジェクトがGitHubミラーを管理するために使用する機能です)。これらすべてを考慮して、Fossilをインストールし、プロジェクトをGitから切り替えることにしました。以下にその方法を示します。Fossilのインストール最初のステップはFossilをインストールすることです。お使いのオペレーティングシステムのパッケージマネージャーがすでに利用可能である可能性が非常に高いです。sudo apt install fossil # Devuan GNU+Linux pkg install fossil # FreeBSDパッケージマネージャーがインストールを終了したら、次のコマンドで利用可能性を確認できます。fossil version上記のコマンドは、次のようなものを返すはずです。これはfossilバージョン2.21 [3c53b6364e] 2023-02-26 19:24:24 UTCGitリポジトリのインポートFossilのドキュメント4には、GitリポジトリをエクスポートしてFossilリポジトリとしてインポートするための例があります。cd repository git fast-export --all | fossil import --git repository.fossil私はこれを異なって行いました。なぜなら、インポートされたリポジトリを「正しく」するためにいくつかの調整をしたいと思ったからです。複数のリポジトリがあったので、エクスポートされたリポジトリを格納するgit-exportedというフォルダと、新しいFossilリポジトリを格納するfossilsという2つの異なるフォルダを作成しました。mkdir ~/git-exported mkdir ~/fossilsこれで、各Gitリポジトリフォルダに入り、それをエクスポートできます。cd repository git fast-export --all > ~/git-exported/repository.exportすべてのGitリポジトリをエクスポートしたら、~/fossilsフォルダに入り、次のコマンドで1つずつインポートする必要があります。fossil import --git runk
epository.fossil ~/git-exported/repository.export--rename-master trunkオプションは、Gitのmasterブランチを新しいFossilリポジトリのtrunkにリネームします。Fossilは、Subversionのような他のバージョン管理システムと同様に、masterブランチの名前としてtrunkを使用します。もしあなたのmasterブランチの名前が「main」である不幸な人の一人であれば、このオプションはあなた向けではありません。リネームしたい場合は、Fossilのドキュメントを確認してください。--attribute "your@mail.com your_username"オプションは、Gitコミットのメールアドレス"your@mail.com"をインポートされたFossilコミットの"your_username"に変更します。Fossilでは、デフォルトのユーザー名は、現在オペレーティングシステムで使用しているものと同じです。明らかに、指定されたメールアドレスは、1つ以上のコミットメッセージに存在する必要があります。複数のメールアドレスを変更したい場合は、複数の--attributeオプションを使用できます。fossil import --git runk
epository.fossil ~/git-exported/repository.exportインポートコマンドの出力は次のようになります。Rebuilding repository meta-data... 100.0% complete... Vacuuming... ok project-id: e64b112b40eb3db188060ddb8deeaa96a6ad3b71 server-id: bfbcd4bf8f0f64eaa2d832ddc3b4af00639624a6 admin-user: your_user (password is "XAxPVZcNQ6")注意深く見ると、出力にはリポジトリ管理者のユーザー名とパスワードが表示されます。リポジトリで特定の操作を行うために必要になるため、これを保持してください。Fossilサーバーの設定Fossilには組み込みのWebサーバーがあるため、それを利用してセルフホストサーバーを迅速かつ簡単に作成できます。次の方法は、少数のユーザーがいるシステムで、外部からアクセスできないプライベートネットワークでは十分です。Fossilサーバーを設定する方法はいくつかあり、ニーズに応じてより良い方法もありますので、公式ドキュメントを確認することをお勧めします。まず、サーバーにFossilリポジトリを格納するためのフォルダを作成する必要があります。mkdir /path/to/your/fossils次に、"fossils"をサーバーのフォルダにコピーします。scp *.fossil user@your_server:/path/to/your/fossils/次に、次のコマンドでサーバーを開始できます。fossil server --port 8043
epository.fossil /path/to/your/fossils/有効な証明書がない場合は、次のコマンドを使用できます。fossil server --port 8043
epository.fossil /path/to/your/fossils/サーバーが実行されたら、ブラウザで次のURL https://server_address_or_hostname:8043/ を入力すると、リポジトリのリストが表示されるWebページにアクセスできます。リストされているリポジトリのいずれかをクリックすると、リポジトリのWebページが表示されます。ナビゲーションメニューに"ログイン"オプションが表示されるはずです。それをクリックし、リポジトリ管理者のユーザー名とパスワードを使用します。これで、リポジトリをお好みに合わせて設定できます。詳細については、Fossilのドキュメントを確認してください。Fossilリポジトリ管理者のパスワードを紛失した場合は、次の手順で回復できます。サーバー上のリポジトリフォルダに移動します。Sqliteがインストールされていない場合は、オペレーティングシステムの通常のインストール方法に従ってインストールしてください。リポジトリ.fossilをSqliteで開きます。sqlite3 repository.fossilSqlite内で実行したら、次のクエリを実行します。select login,pw from user;上記のクエリは、次のようなものを返します。anonymous|57EBCBD1AAE663B4 nobody| developer| reader|パスワードは、2番目の列の値です(この例では文字列My3w2jRxt1)。次のコマンドでSqliteを終了します。.quitFossilの使用ここでは、Fossilの作業を開始するための非常に簡単なガイドを示します。このガイドは、Gitの基本的なレベルの知識があることを前提としており、出発点にすぎないため、Fossilのドキュメントを読むことをお勧めします。