ArtifactFS は、完全な clone を待たずに、Git リポジトリをローカルファイルシステムとしてマウントします。ワーキングツリーをすばやく必要とし、ファイル内容のオンデマンド取得を許容できる環境に適しています。
大きなリポジトリをサンドボックス、コンテナ、仮想マシンで扱うときに ArtifactFS を使います。小さなリポジトリでは、通常の git clone のほうが簡単なことが多いです。
ArtifactFS は、Artifacts の Git リモート と、その他の Git リポジトリで動作します。
- 完全なローカル clone より、起動時間が重要なとき
- リポジトリが大きく、clone がサンドボックスの起動を遅くするとき
- ツールが Git への直接アクセスではなく、マウントされたワーキングツリーを必要とするとき
小さなリポジトリでは、まず通常の git clone から始めます。十分に速く、運用も簡単なことが多いです。
ArtifactFS は blobless clone から始まります。先にコミット、ツリー、refs を取得し、FUSE 経由でワーキングツリーをマウントします。
ファイル内容は、ツールが読み取るにつれて非同期に取得されます。読み取りがブロックされるのは、要求された blob がまだ取得されていないときだけです。以降の読み取りは、ローカルの blob キャッシュから行われます。
ArtifactFS は、パッケージマニフェスト、依存関係ファイル、よく使うソースファイルなど、開発ツールの作業を先に進めやすいファイルを優先します。大きなバイナリアセットは優先度を下げます。
この例では ArtifactFS をインストールし、リポジトリトークンから認証済みの Artifacts リモートを組み立て、リポジトリをマウントし、マウントされたワーキングツリーからファイルを読み取ります。
ホスト上で動作する FUSE 実装、リポジトリスコープの Artifacts トークン、作成または取得レスポンスの remote 値がすでに揃っている前提です。
go install github.com/cloudflare/artifact-fs/cmd/artifact-fs@latest
export ARTIFACTS_REMOTE="<PASTE_REMOTE_FROM_CREATE_OR_GET_RESPONSE>"
export ARTIFACTS_TOKEN="<YOUR_READ_TOKEN>"
export ARTIFACTS_TOKEN_SECRET="${ARTIFACTS_TOKEN%%\?expires=*}"
export ARTIFACTS_AUTH_REMOTE="https://x:${ARTIFACTS_TOKEN_SECRET}@${ARTIFACTS_REMOTE#https://}"
artifact-fs add-repo \
--name starter-repo \
--remote "$ARTIFACTS_AUTH_REMOTE" \
--branch main \
--mount-root /tmp
artifact-fs daemon --root /tmp &
ls /tmp/starter-repo/
cat /tmp/starter-repo/README.md
git -C /tmp/starter-repo log --oneline -5認証済みリモート URL には、有効期間の短いトークンを使います。より小さいリポジトリや、より単純なローカルワークフローが必要な場合は、通常の Git プロトコル clone を使います。