7. Dogfood: this repo runs forest¶
The forest repository manages its own examples/ tree with forest — a live
demonstration that .forest/ and .git/ coexist without overlapping. It
was set up with the same commands you have been running since chapter 1:
forest init
forest checkout demo
forest remote add origin s3://forest-cli-test --region us-east-2
forest add examples ./examples
forest push
The only difference from your tutorial repo: the remote is an S3 bucket instead of a local directory — one line, same everything else.
Inspect the result¶
Clone tmsincomb/forest and compare
what git sees with what stays local:
That is the shared half of the metadata — exactly the two committed files
you built in chapters 1–4. The checkout's forest.yaml should look familiar
too:
project: demo
remotes:
origin:
url: s3://forest-cli-test
region: us-east-2
stages:
examples:
remote_path: demo/examples
data:
remote_path: demo/data
sync_by: directory
direction: pull
Meanwhile the repo's .gitignore carries the managed patterns, so HEAD,
local.yaml, and sync_state.json never leave each contributor's machine:
.forest/HEAD
.forest/checkouts/*/local.yaml
.forest/checkouts/*/sync_state.json
.forest/checkouts/*/sync_state.json.lock
Bootstrapping a fresh clone¶
A fresh clone has the shared metadata but no local half yet — no bindings, no active checkout. Two commands restore it, exactly the fresh-teammate flow from chapter 3's shared/local split:
forest checkout demo # activate (auto-registers HEAD locally)
forest bind examples ./examples # re-create the local stage↔path binding
forest pull # single configured remote is used automatically
Credentials
Pulling from the bucket needs AWS credentials; the layout is the
demonstration. Even without credentials, git ls-files .forest and the
managed .gitignore show the shared/local split working.
Why this matters¶
Dogfooding keeps the onboarding honest: if the quick start drifts from reality, the repo's own data breaks first. It is also the canonical example of the committed-vs-gitignored split described in the data model.
That's the tutorial. From here: the CLI reference for every command, or the design decisions for why it works this way.