ck-git-hosting

Clone and update projects

Find projects

ckgit projects
ckgit projects --uncloned

ckgit projects lists hosted projects and their local management state. --uncloned selects projects absent from this device's management records; it does not search the disk for ordinary Git clones. JSON includes a stable schema version, project state, selected path, and SSH clone URL.

To populate an existing folder, use ckgit clone --all --into /path/to/projects. The command displays its scope and asks for confirmation on a terminal; --dry-run previews and --yes executes without prompting. Repeated --project NAME selects a smaller set. Already managed projects are skipped, existing folders are never overwritten, and failures do not stop other clones. Missing or unresolved management records remain visible: repair the selection with checkout set-canonical or migrate, or forget it before cloning anew.

ckgit clone uses only the configured user@host plus a validated project name, creates the destination only when it does not already exist, and names the resulting remote from remote_name (normally ckgit). If this device has no other main checkout for that project, the clone joins ordinary status and sync automatically, including with a custom destination name. If another main checkout already exists, the new folder is a secondary copy; the result names the main folder and prints the exact command to select the new copy.

Fetch and update

ckgit fetch --project my-project
ckgit update --project my-project

ckgit fetch downloads all hosted branches into the configured remote-tracking namespace and downloads tags, without changing local branches or working files. --branch NAME and --no-tags limit that operation. ckgit update downloads the current branch and tags, then fast-forwards only a clean, attached checkout. It never switches branches, rebases, or creates a merge commit. Dirty files, diverged history, missing branches, and conflicting tags require attention; other projects continue. Both commands use managed checkouts by default, accept --repo PATH or --project NAME, and offer read-only --dry-run. When incoming objects are absent locally, a preview explains that ancestry requires a fetch. sync continues to upload committed local refs only.