v0.11.0

File Sync

Last updated

This page explains how podrun up syncs the local project to the remote host with rsync, including the diff preview before overwriting.

Flow

graph TB
    Start[RsyncToRemote] --> Check{Remote folder empty?}
    Check -->|empty| Sync[rsync -avz --delete]
    Check -->|not empty| Preview[rsync -avni --delete<br/>dry-run]
    Preview --> Changed{Changes?}
    Changed -->|no| Sync
    Changed -->|yes| Ask[Prompt confirm sync? y/N]
    Ask -->|y / Y| Sync
    Ask -->|other| Cancel[Return cancelled]

Diff Preview

When the remote folder already has content, rsync -avni --delete runs first and its output is printed. These lines count as "no change" and are skipped:

Line Notes
Empty line —
sending ... / sent ... / total size ... rsync summary
Starts with .d..t....... Directory timestamp change only

Any other line counts as a change and requires y or Y to continue; any other input returns cancelled and aborts up. A confirmed overwrite writes an overwrite record; an empty remote folder writes a sync record.

Sync

The real sync uses rsync -avz --delete, so extra remote files are deleted and the remote folder mirrors the local one.

Exclude List

Category Excluded
Dependencies node_modules/, vendor/, __pycache__/, *.pyc, .venv/, venv/, env/
Version control .git/, .gitignore
Local files .env.local, *.log, .DS_Store, Thumbs.db
Build output .next/, app/package-lock.json

The diff preview also excludes docker-compose.podrun.yml so the remote copy is not reported as a change; the real sync does not exclude it, so --delete removes the remote copy and Compose Rewrite regenerates it afterward.

.env is not excluded and is synced to the remote host.

SSH Behavior

Item Setting
Authentication sshpass -p $PODRUN_PASSWORD
Host key StrictHostKeyChecking=no
Remote address $PODRUN_USERNAME@$PODRUN_SERVER
中文