Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

sync

Pulls data from configured remote providers and writes it to the local filesystem.

banco sync                                     # sync all configured providers
banco sync <name>                              # sync a specific provider by name or alias
banco sync <name> --module tasks               # sync only the tasks module
banco sync <name> --module repos               # sync only the repos module
banco sync <name> --pattern "myorg/frontend"   # sync only projects matching regex
banco sync <name> --jobs 10                     # clone/fetch up to 10 repos at once

--module and --pattern can be combined: banco sync github --module tasks --pattern "myorg/.*".

Sync is non-destructive: it never deletes or overwrites existing files.

Options

OptionDescription
--module <tasks|repos>Limit sync to a single module; skips the other. Useful when you only want to fetch issues without cloning repos, or vice versa.
--pattern <regex>Only sync projects whose path (owner/repo for GitHub/GitLab) matches this regex. Applied on top of the project list already defined in the provider config. Not applicable to Jira.
--jobs <n>, -j <n>Number of repos to clone/fetch concurrently. Defaults to 6. Repo syncing is network-bound, so this is a small fixed value rather than something derived from CPU cores — raising it mainly risks tripping the remote’s connection or rate limits.

Sync state

After each successful sync, banco writes a timestamp to .banco/sync-state/<provider>. This records when the last sync completed and is available for informational purposes. The state file is only written on success, so a failed sync is retried in full on the next run.

Tasks (issues)

Syncing tasks is a two-phase process: fetch then reconcile.

Phase 1 — fetch. Only open/non-done issues are pulled from the remote. The full set of currently-open issues is always retrieved.

Phase 2 — reconcile. After writing the fetched issues, banco scans every local task file. Any task whose ID was not in the fetched set and whose local status is not already done/closed is marked done/closed — it was completed on the remote and simply disappeared from the open results.

SituationAction
Issue not yet on diskCreates a new file with frontmatter and initial content
Issue title changedRenames the file; body content is untouched
Status or labels changedUpdates frontmatter block; body content is untouched
Issue unchangedDoes nothing
Local open task absent from remote setMarks the local file as done/closed

Repos

SituationAction
Repo not yet on diskClones via SSH
Repo already on diskRuns git fetch --all --prune

Within a provider, repos are cloned/fetched in parallel (see --jobs); git’s own progress output is suppressed in favour of a single summary line. A failed clone aborts the sync; a failed fetch on an existing repo is reported as a warning and does not stop the run.