Commits are trees of named DAG snapshots. Branches and tags point to commits; HEAD selects the checkout. This page publishes the completed course project to the fixture-owned Moto remote, then uses separate satellite projects for reuse and shallow-history operations.
Publish and inspect history
dml log |jq-e'length > 0'dml show |jq-e'.dags["course-execution"] and .dags["course-artifacts"]'dml tag create course-v1 >/dev/nulldml tag list |jq-e'.[] | select(.name == "course-v1")'dml config show |jq-e--arg root "$DML_REMOTE_ROOT"'.remote.root == $root'dml push >/dev/nulldml push --revision @course-v1 >/dev/nulldml branch list --remote|jq-e'.[] | select(.name == "main")'
dml log, show, and diff inspect history; branches can have one upstream, while tags do not. push publishes HEAD to the current attached branch’s upstream by default. push --revision BRANCH publishes that local branch to its upstream without checking it out; push --revision @NAME publishes a local tag once without replacing an existing remote tag. A commit ref or ancestor revision publishes to the current attached branch’s upstream. Endpoint listing is read-only: it does not fetch commits or update local tracking refs.
Reuse from satellite projects
The satellites are deliberately outside research-demo, so fetch, dependency, and shallow-history exercises cannot disturb the course project.
reuse_home="$DOCS_WORKSPACE_ROOT/course-reuse"dep_home="$DOCS_WORKSPACE_ROOT/course-dependency"shallow_home="$DOCS_WORKSPACE_ROOT/course-shallow"mkdir"$reuse_home""$dep_home""$shallow_home"(cd"$reuse_home"dml initdml config set remote.root "$DML_REMOTE_ROOT">/dev/nulldml fetch main >/dev/nulldml dag checkout main course-execution --remote--name reused-executiondml show |jq-e'.dags["reused-execution"]')(cd"$dep_home"dml initdml dep add tutorial "$DML_REMOTE_ROOT"dml fetch --dep tutorial main >/dev/nulldml dag checkout main course-artifacts --dep tutorial --name dependency-artifactsdml show |jq-e'.dags["dependency-artifacts"]')(cd"$shallow_home"dml--remote-root"$DML_REMOTE_ROOT" clone main --depth 1 --project-home .dml show |jq-e'.dags["course-execution"]'dml fetch --unshallow main >/dev/null)
dml.load("name") reads a committed DAG and dag.require("name") imports one into new work. A shallow clone contains the selected commit’s complete tree, DAGs, nodes, data, and imports; only older parents may be unavailable. Use a larger fetch --depth N to deepen history or fetch --unshallow to retrieve it all. Dependencies are import-only endpoints, not the project’s cache or execution remote. A normal push can advance an observed shallow branch; creating a remote branch or forcing publication requires complete ancestry.
show preserves the current snapshot at a shallow boundary and reports diff: null when its parent is unavailable. diff itself requires the parent; deepen the clone to compare changes.
Migrate an existing remote
Migration is permanently restricted to the previous version → current version only. If you are N versions behind, install each intermediate version in order and run its migration tool. Complete every migration step; the latest tool does not support skipping versions or migrating directly from older ones.
An older individual-object remote must be converted before use with this client. Use a new, empty S3 prefix. Stop all source writers, workers, and garbage collection until conversion and configuration cutover are complete. Execution and adapter records are copied unchanged, regardless of lifecycle or cleanup status; migration does not invoke adapters or perform their cleanup.
Use normal AWS credentials. The migration verifies the converted graphs before making the destination usable; it never changes or deletes the source. Switch every participating client and worker to the new root after success. A failed attempt leaves a staging prefix; use another empty destination for a retry. Dry-run checks metadata and prerequisites without copying or validating all data.
Embedded artifact URIs are preserved, not rewritten. Even though auxiliary files are copied, old URIs can still point to the source: retain that data while those artifacts are referenced. Remote graph garbage collection likewise requires quiescent writers and does not collect external artifact bytes.