檔案同步
最後更新
本頁說明 podrun up 如何以 rsync 把本地專案同步到遠端,以及覆寫前的差異預覽。
流程
graph TB
Start[RsyncToRemote] --> Check{遠端目錄是否為空}
Check -->|空| Sync[rsync -avz --delete]
Check -->|非空| Preview[rsync -avni --delete<br/>dry-run]
Preview --> Changed{有變更}
Changed -->|否| Sync
Changed -->|是| Ask[詢問 confirm sync? y/N]
Ask -->|y/Y| Sync
Ask -->|其他| Cancel[回傳 cancelled]
差異預覽
遠端目錄已有內容時,先以 rsync -avni --delete 試跑並印出結果。下列行會被視為「沒有變更」而略過:
| 行 | 說明 |
|---|---|
| 空行 | — |
sending .../sent .../total size ... |
rsync 摘要 |
.d..t....... 開頭 |
只有目錄時間戳改變 |
其他任何一行都代表有變更,需輸入 y 或 Y 才會繼續;輸入其他值則回傳 cancelled 並中止 up。確認後寫入一筆 overwrite 紀錄;遠端目錄為空時則寫入 sync 紀錄。
同步
實際同步使用 rsync -avz --delete,遠端多出的檔案會被刪除,讓遠端目錄與本地一致。
排除清單
| 類別 | 排除項目 |
|---|---|
| 相依套件 | node_modules/、vendor/、__pycache__/、*.pyc、.venv/、venv/、env/ |
| 版本控制 | .git/、.gitignore |
| 本機檔案 | .env.local、*.log、.DS_Store、Thumbs.db |
| 建置產物 | .next/、app/package-lock.json |
差異預覽另外排除 docker-compose.podrun.yml,避免遠端副本被列為變更;實際同步則未排除它,因此 --delete 會先刪除遠端副本,之後由 Compose 改寫 重新產生。
.env 不在排除清單內,會一併同步到遠端。
SSH 行為
| 項目 | 設定 |
|---|---|
| 認證 | sshpass -p $PODRUN_PASSWORD |
| 主機金鑰 | StrictHostKeyChecking=no |
| 遠端位址 | $PODRUN_USERNAME@$PODRUN_SERVER |