TiDB Cloud Filesystem で Git ワークスペースを管理する
Git リポジトリを FUSE マウントにクローンし、通常の Git コマンドを使って作業できます。大規模なリポジトリでは、blobless clone を使用すると、すべてのファイル内容のダウンロードが完了する前に作業を開始できます。リンクされた worktree を使うと、再度クローンすることなく、ブランチごとに個別の作業ディレクトリを用意できます。
前提条件
開始する前に、以下を確認してください。
- TiDB Cloud CLI をインストールする。
- FUSE を通じて ファイルシステムをマウントする。Git ワークスペースは WebDAV マウントではサポートされません。
- マウントされたファイルシステムと、必要な権限を持つトークンを
tiから利用できるようにします。詳細は 既存のファイルシステムにアクセスする を参照してください。 - Git をインストールし、使用するリポジトリの認証を設定します。
このガイドのすべての Git ワークスペースは、マウントされたファイルシステムのパス内に作成されます。
Git リポジトリをクローンする
リポジトリ URL と、マウントされたディレクトリ内のターゲットパスを指定します。
ti fs-git clone-git-workspace \
--repo-url https://github.com/pingcap/tidb.git \
--target-path /path/to/workspace/tidb
リポジトリは /path/to/workspace/tidb にクローンされます。
大規模なリポジトリでは、--blobless を使用すると、すべてのファイル内容のダウンロードが完了する前に作業を開始できます。
ti fs-git clone-git-workspace \
--repo-url https://github.com/pingcap/tidb.git \
--target-path /path/to/workspace/tidb \
--blobless
--blobless を指定すると、ti は最初にリポジトリ構造と Git メタデータをダウンロードします。デフォルトでは、--hydrate auto により、作業中に残りのファイル内容がバックグラウンドでダウンロードされます。バックグラウンド hydration を無効にするには、--hydrate off を指定します。
クローンコマンドが終了する前にすべてのファイル内容のダウンロードを完了させる必要がある場合は、--hydrate sync も指定します。
ti fs-git clone-git-workspace \
--repo-url https://github.com/pingcap/tidb.git \
--target-path /path/to/workspace/tidb \
--blobless \
--hydrate sync
blobless ワークスペースのダウンロードを完了する
リポジトリ内のすべてのファイル内容を必要とするタスクを実行する前に、blobless ワークスペースで残っているダウンロードがあれば完了するまで待機します。
ti fs-git hydrate-git-workspace \
--target-path /path/to/workspace/tidb \
--timeout 30m
この処理は hydration と呼ばれ、ファイルの変更を破棄することなく、不足している Git データをダウンロードします。
クローンまたは hydration が失敗した場合は、再試行する前に CLI のエラーと診断ログを確認してください。詳細は TiDB Cloud Filesystem のトラブルシューティング を参照してください。
リンクされた worktree を作成する
リポジトリを再度クローンせずに、別のブランチ用の独立した作業ディレクトリが必要な場合は、リンクされた worktree を使用します。新しい worktree は、ベースワークスペースと Git データを共有します。
たとえば、新しい feature-x ブランチ用の worktree を作成するには、次のようにします。
ti fs-git add-git-worktree \
--base-path /path/to/workspace/tidb \
--worktree-path /path/to/workspace/tidb-feature \
--branch-name feature-x
worktree の作成後は、/path/to/workspace/tidb-feature で通常の Git コマンドを使用できます。
git -C /path/to/workspace/tidb-feature status
特定のコミットで detached worktree を作成する場合など、その他のオプションについては、add-git-worktree コマンドリファレンス を参照してください。
リンクされた worktree を削除する
リンクされた worktree が不要になったら、削除します。
ti fs-git remove-git-worktree \
--worktree-path /path/to/workspace/tidb-feature
リンクされた worktree を削除しても、ベースワークスペースや、他の worktree と共有されている Git データは削除されません。
worktree にコミットされていない変更が含まれている場合、このコマンドは削除を拒否します。worktree を削除する前に、必要な変更をコミットするか、別の方法で保持してください。
コミットされていない変更を破棄してよいと確信できる場合にのみ、--force を使用してください。
ti fs-git remove-git-worktree \
--worktree-path /path/to/workspace/tidb-feature \
--force
マシンを離れる前に作業内容を保持する
--mount-profile coding-agent を使用すると、.git などの Git メタデータはローカルマシンに保持されます。ローカルでコミットしただけでは、その履歴を別のマシンでリカバリ可能にはできません。drain やアンマウントを行っても、このローカル Git メタデータは転送されません。履歴を保持するには、Git リモートへの push、または以下のメタデータアーカイブのワークフローを使用してください。
一時的なマシンを削除する前に、次を実施してください。
- 次のいずれかの方法で Git 履歴を保持します。
- 書き込み可能な Git リモートにコミットして push します。独立した clone または fetch から、想定したコミット ID が利用可能であることを確認してください。
- push できない場合は、リンクされた worktree のベースリポジトリのメタデータを含む、必要なローカル Git メタデータに対して明示的な
--path値を指定してpack-file-systemを使用します。別の環境でunpack-file-systemを使って復元し、コミット ID と作業ファイルを比較してください。パスが変わる場合は、まずgit worktree repairで worktree 接続を修復 してください。実行可能な例については、push していないワークスペースを別のマシンにリカバリする を参照してください。
- 必要な untracked ファイルや ignored ファイルは別途保持してください。push で保持されるのはコミット済みの内容だけです。
- 安全にアンマウントする。リカバリ確認が完了するまでは元のディスクを保持してください。
各プロファイルでローカルに保持されるデータについては、マウントプロファイルとローカルオーバーレイ を参照してください。
push していないワークスペースを別のマシンにリカバリする
この例では、リンクされた worktree を含む作業途中の Git ワークスペースを、リモートに push せずに別のマシンへ移動します。ベースリポジトリの Git メタデータと、リンクされた worktree の worktree ごとのメタデータの両方をリモートアーカイブにパックし、2 台目のマシンで復元して worktree リンクを修復し、コミット ID を比較して転送を確認します。
この例では、ソースマシンで --mount-profile coding-agent を使用し、このページの前半で説明した次のレイアウトが作成されていることを前提としています。
/path/to/workspace/tidb (base repository, contains .git/)
/path/to/workspace/tidb-feature (linked worktree, contains .git file pointing at the base)
ソースマシンで
後で比較できるようにコミット ID を記録します。
(cd /path/to/workspace/tidb && git rev-parse HEAD) | tee /tmp/tidb-base.sha (cd /path/to/workspace/tidb-feature && git rev-parse HEAD) | tee /tmp/tidb-feature.shaパック前に、キャッシュされた blob が永続化されるよう、書き込みプロセスを停止し、保留中の書き込みを drain します。
ti fs drain-file-system --mount-path /path/to/workspaceローカルオーバーレイにのみ存在する Git メタデータをパックします。
coding-agentは.gitをリモート名前空間の外に保持するため、ベースリポジトリの.gitディレクトリと、各リンクされた worktree の.git/worktrees/<name>サブディレクトリの両方を明示的に指定する必要があります。.envや仮想環境など、保持したい untracked ファイルや ignored ファイルも同じアーカイブに含めてください。--archive-pathはアーカイブを保存するリモートファイルシステム内のパスです。/packs/のように、作業ツリーの外の場所を選んでください。ti fs pack-file-system \ --mount-path /path/to/workspace \ --mount-profile coding-agent \ --archive-path /packs/tidb-workspace.tar.zst \ --path tidb/.git \ --path tidb/.git/worktrees/tidb-feature \ --path tidb-feature/.git \ --path tidb/.env--pathの値はマウントパスからの相対パスです。保持したいディレクトリまたはファイルごとに--pathを繰り返し指定してください。指定されていない untracked ファイルや ignored ファイルは、移行先マシンでは復元されません。安全にアンマウントする。移行先マシンでリカバリが確認されるまでは、ソースディスクを利用可能な状態で保持してください。
対象マシン上で
宛先パスに、同じプロファイルで同じファイルシステムをマウントします。宛先パスはソースと異なっていてもかまいません。以下の修復手順で、リンクされた worktree に保存されているパスを修正できます。
mkdir -p /new/path/to/workspace ti fs mount-file-system \ --mount-path /new/path/to/workspace \ --mount-profile coding-agent \ --driver fuseパックしたメタデータを、新しいマウントのローカルオーバーレイに復元します。
ti fs unpack-file-system \ --mount-path /new/path/to/workspace \ --mount-profile coding-agent \ --archive-path /packs/tidb-workspace.tar.zstマウントパスがソースから変更されている場合は、その中で Git コマンドを実行する前に、リンクされた worktree の逆参照を修復します。これはベースリポジトリから実行してください。
cd /new/path/to/workspace/tidb git worktree repair /new/path/to/workspace/tidb-feature git worktree listgit worktree listには、新しいパスでtidbとtidb-featureの両方が表示され、prunableマーカーが付いていないことを確認してください。ベースリポジトリも移動している場合は、ベースリポジトリ内で引数なしのgit worktree repairを実行し、登録されているすべての worktree を更新してください。コミット ID が、ソースマシンで記録したものと一致することを確認します。
(cd /new/path/to/workspace/tidb && git rev-parse HEAD) (cd /new/path/to/workspace/tidb-feature && git rev-parse HEAD)両方の出力は、ソースマシンで取得した対応する
.shaファイルと一致している必要があります。どちらかが異なる場合は、ソースディスクを削除しないでください。アーカイブが不完全であり、通常は追加の--path値が原因です。ソース側で不足しているパスを指定してpack-file-systemを再実行し、もう一度 unpack してください。両方のコミット ID が一致し、保持した未追跡ファイルが対象ワークスペースで読み取れることを確認してから、ソースマシンを削除してください。
次のステップ
- blobless clone とバックグラウンド hydration を使用するエージェントワークフローについては、TiDB Cloud Filesystem 上でエージェント向けの Git ワークスペースを準備する を参照してください。
- すべての
ti fs-gitコマンドとオプションについては、TiDB Cloud Filesystem Git CLI コマンドリファレンス を参照してください。