為什麼遠端 Mac 上 Git/Homebrew/npm 容易逾時與中斷?
主要原因可歸納為三點:距離與延遲—遠端節點與 GitHub、npm registry、Homebrew 上游往往跨區甚至跨境,RTT 高、骨幹不穩時易觸發逾時;預設逾時偏短—Git 的 HTTP 層、npm 的 fetch 與 Homebrew 的 curl 預設逾時在長距離或大檔時常不足;連線未複用—SSH 未設定 ControlPersist 時,每次 git fetch 都重新建立連線,增加失敗與重試成本。CI 環境中若未加大 buffer 或重試次數,大倉庫或大量依賴會直接失敗。
Git 逾時與斷線重試可執行參數(http.postBuffer、timeout、ControlPersist)
以下參數可直接在遠端 Mac 或 CI 環境設定,建議寫入 ~/.gitconfig 或專案 .git/config。
- http.postBuffer:加大 POST 緩衝區,例如
524288000(約 500MB),避免大 push 被截斷。 - http.lowSpeedLimit 與 http.lowSpeedTime:低速逾時,例如 lowSpeedLimit 1000、lowSpeedTime 60,避免長時間低速被判定失敗。
- SSH ControlPersist:在
~/.ssh/config對目標 host 設定ControlPersist 10m、ControlMaster auto,複用連線;可搭配ServerAliveInterval 60維持連線。
git config --global http.postBuffer 524288000 git config --global http.lowSpeedLimit 1000 git config --global http.lowSpeedTime 60 # ~/.ssh/config 範例 Host github.com ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 10m ServerAliveInterval 60
Homebrew 與 npm 重試與逾時配置步驟
Homebrew: 設定環境變數 HOMEBREW_CURL_RETRIES(如 5)增加重試;必要時改用鏡像或代理(HOMEBREW_BOTTLE_DOMAIN 等)。npm: 在專案或全域 .npmrc 中設定 fetch-retries=5、fetch-retry-mintimeout=20000、fetch-timeout=120000、network-timeout=120000(單位毫秒);CI 中可加上 npm config set 或寫入 .npmrc 再執行 npm install。
# Homebrew 範例 export HOMEBREW_CURL_RETRIES=5 # npm 範例 .npmrc fetch-retries=5 fetch-retry-mintimeout=20000 fetch-timeout=120000 network-timeout=120000
自建鏡像 vs 代理 vs 鏡像站選型對比表
| 方案 | 適用場景 | 速度/穩定性 | 成本與維護 |
|---|---|---|---|
| 自建鏡像 | 內網、合規要求高、多節點共用 | 可控、延遲低 | 較高,需維護與儲存 |
| 代理(HTTP/HTTPS 或 SSH 隧道) | 跨境、單一節點或小團隊 | 依代理節點品質 | 中,需穩定代理 |
| 公開鏡像站 | 快速落地、零維護 | 依地區與供應商 | 低,零維護 |
選型時可依團隊規模、合規需求與預算決定;若僅需穩定拉取且不想自建,可優先使用鏡像站或代理,並搭配上文 Git/Homebrew/npm 逾時與重試設定。更多對比與配置可參考站內跨境拉取加速對比與遠端 Mac 快取策略文章。
小結與推薦
遠端 Mac 上要提升 Git/Homebrew/npm 拉取穩定性,建議:① 加大 Git http.postBuffer、設定 lowSpeedLimit/lowSpeedTime,並在 SSH 啟用 ControlPersist;② Homebrew 提高 HOMEBREW_CURL_RETRIES,必要時換鏡像;③ npm 透過 .npmrc 設定 fetch-retries、fetch-timeout、network-timeout;④ 依需求在自建鏡像、代理與鏡像站間選型。若希望節點常駐、網路環境可控,可選用本站遠端 Mac:從首頁或定價選擇套餐、立即購買即可開始使用,無需登入即可瀏覽上述頁面。