部落格

將 Codex 專案移至伺服器上的 Hermes

Markdown

將儲存庫移轉至伺服器,以便在 Hermes 中繼續作業:已儲存的變更、相依套件、機密資料、工作資料夾,以及繼續開發前的檢查。

閱讀全文

如需服務使用說明,請參閱 Ailoot 說明文件。

重要重點

若要在 Hermes 中繼續處理使用 Codex 建立的專案,請移轉儲存庫本身並還原其環境。採用此方法不需要另外執行「從代理程式匯入專案」的步驟。先檢查已儲存的檔案和相依套件,再於 Hermes 中開啟正確的資料夾。本指南假設伺服器與 Hermes 已完成設定,而且你能存取該儲存庫。

移轉前的準備事項

儲存庫是包含 Git 變更歷史的專案資料夾。工作副本則包含你要編輯的檔案。此處的目標是將該副本放到伺服器上,然後繼續開發。你目前不需要讓訪客能夠使用此應用程式。

如果伺服器上尚未安裝代理程式,請先參閱在 VPS 上安裝 Hermes Agent。此處需要可正常運作的 Hermes 安裝環境、伺服器終端機和 Git。你還需要伺服器可存取的遠端儲存庫;如果尚未建立,請先建立儲存庫,並在不含機密資料的情況下將專案儲存其中。若是私人儲存庫,請事先從自己的帳戶設定讀取權限;不要將權杖放入儲存庫 URL 或傳給代理程式的訊息中。

移轉期間請暫停對專案進行平行編輯。在來源電腦上,於專案資料夾本身開啟終端機並執行:

git status --short --branch
git status --short --ignored

第一個指令會顯示分支和檔案狀態。M 表示已修改,?? 表示 Git 尚未追蹤該檔案。在第二個指令的結果中,被忽略的檔案會標示為 !!。一般的乾淨狀態並不能證明 Git 外沒有必要檔案。

將必要的變更另存為一個獨立提交,並依照平常的方式將正確分支推送至遠端儲存庫。推送前請檢查提交內容:不得包含金鑰、密碼或真實使用者資料。如果不確定要儲存哪些變更,請先要求 Codex 列出變更並說明其用途,不要刪除檔案或推送至儲存庫。

專案部分移轉前要檢查的事項
來源檔案與 Git 歷史必要變更已儲存,且可從遠端儲存庫中選定的分支存取
README 與代理程式指示已記錄啟動步驟、檢查項目與限制;指示內容為最新版本
相依套件檔案專案使用的相依套件定義和鎖定檔(固定版本的檔案)都已儲存
機密資料有安全且獨立的方式可在伺服器上設定;其值未放入 Git,也未透過聊天傳送
資料庫與上傳檔案你知道如何取得允許使用的測試資料,以及如何依照專案指示還原資料

不要假設複製儲存庫會一併移轉外部資料庫、被忽略資料夾的內容,或你與 Codex 的對話。聊天記錄、訂閱、個人檔案和代理程式本身的設定,都不屬於此移轉方法的範圍。

將正確的分支複製到伺服器

先在來源電腦上儲存此指令的輸出:

git status --porcelain=v2 --branch

# branch.oid 這一行會顯示目前的提交,而 # branch.head 會顯示分支。提交是專案的一個已儲存版本。對於已有提交的一般專案,你可以用這些資訊比較來源副本和新副本;這項比較不會檢查尚未提交的變更。

在伺服器上,前往要存放專案的目錄。將儲存庫複製到新的資料夾。在以下範本中,將 REPOSITORY_URL 替換成你的儲存庫 URL,將 BRANCH_NAME 替換成你已儲存並推送的分支名稱,並將 my-project 替換成你要用於新資料夾的名稱:

git clone --branch BRANCH_NAME REPOSITORY_URL my-project
cd my-project
git status --porcelain=v2 --branch

這是範本,不是可直接複製使用的 URL。git clone 會建立資料夾,以及所選分支的工作副本。如果目的資料夾已存在,就必須是空的;不要為了重新執行指令而刪除其中的內容,請改用新名稱。

比較兩份副本中的 # branch.oid。如果值不同,請勿開始在伺服器上修正程式碼:檢查所選分支、已推送的提交,以及是否有人進行了平行變更。如果狀態輸出顯示有已修改的檔案,請另外調查。不要用清理或強制重設的方式讓兩者「一致」。

若儲存庫使用 Git 子模組(巢狀儲存庫),也必須取得其中的內容。git clone 提供 --recurse-submodules 選項;只有在專案確實包含子模組,而且其 URL 已經過確認時,才使用此選項。若專案依賴其他外部資源,可能還需要依照 README 所述執行額外程序。

依照專案規則還原相依套件

先閱讀 README 和專案設定檔,確認所需的執行環境版本,以及安裝相依套件時使用的套件管理工具。不要只因為下方範例出現 npm,就把專案平常使用的工具換成 npm。

Node.js 和 npm 的假設範例: 儲存庫中有彼此一致的 package.json 和 package-lock.json 檔案,且伺服器上已安裝適用於該專案的 Node.js 版本。符合這些條件時,請在專案資料夾中執行:

npm ci

根據 npm ci 說明文件,此指令會從鎖定檔安裝整個專案的相依套件,不會重寫 package.json 或 package-lock.json。如果兩者內容不一致,安裝就會失敗。安裝前會刪除任何既有的 node_modules 資料夾。

如果鎖定檔是以會影響相依套件樹的選項建立,例如 --legacy-peer-deps,npm ci 也需要使用相同選項。請檢查來源專案的指示和設定。不要刪除鎖定檔,也不要更新所有相依套件來掩蓋第一次移轉時發生的錯誤。

安裝前,請確認專案本身的安裝與啟動指令。在無法存取正式環境資料的另一份工作副本中執行這些指令,並在聊天和 Git 以外設定必要的環境值。可行時,請使用權限有限的測試憑證檢查專案。如果專案依賴資料庫或檔案,請先依照專案指示還原允許使用的測試資料集;來源檔案相同並不能取代那些資料。

安裝後,執行 README 中既有的檢查項目:若有提供,請執行測試和建置。指令名稱會依專案而異。成功安裝相依套件並不代表應用程式已可正常運作。

在 Hermes 中開啟工作副本

在伺服器終端機中,前往新副本的根目錄,並啟動已安裝的代理程式:

cd /absolute/path/to/my-project
hermes

此處的 /absolute/path/to/my-project 是專案完整路徑的佔位文字。在 Hermes 啟動畫面上,確認工作目錄,以及終端機指令執行的環境。此啟動方式適用於伺服器上 Hermes 的本機終端機環境。如果已設定 SSH 或 Docker,代理程式可能會在其他環境中執行指令;請先確認該環境中可用的專案路徑。

請代理程式使用終端機工具確認實際的工作資料夾,然後閱讀 README 和專案指示。訊息中提到資料夾名稱並不足以證明路徑正確。

下方列出的優先順序來自文件的某個固定版本,可能與你安裝的 Hermes 版本不同。請確認目前工作階段中的現行指示。Hermes 支援 AGENTS.md,但是否讀取該檔案取決於上下文檔案的優先順序。根據 Hermes 官方文件,系統會選用一種指示檔案,優先順序依序為:.hermes.md、AGENTS.override.md、AGENTS.md、CLAUDE.md 和 .cursorrules。開始工作前,請檢查是否有舊的 .hermes.md 或個人使用的 AGENTS.override.md;不要假設代理程式一定會同時套用這些檔案旁的 AGENTS.md。

在選用的指示中保留專案目的、檢查指令和變更限制。不要將指示改成對話紀錄檔案庫。如果你也需要移轉代理程式本身的設定,則屬於另一個程序;其範圍請參閱從 Claude Code 移轉至 Codex 的指南。

指派一項工作給代理程式,並檢查結果

先閱讀專案,不要進行變更。例如:

我們正在我指定的資料夾中處理現有專案。
請使用終端機工具確認實際的工作目錄。
請閱讀 README 和目前的專案指示。
請勿開啟包含機密資料的檔案,也不要輸出環境變數的值。
請列出檢查指令及其執行前提。
目前請勿變更或安裝任何內容,也不要推送至儲存庫。

接著協議一項小型工作,例如修正介面文字。指定要變更的檔案或範圍,並禁止順帶更新相依套件。如果你想把實驗和主要副本分開,請先了解使用獨立 Git worktree 工作副本。

根據檔案變更內容和再次執行專案檢查的結果來驗收。在進行可能失敗的實驗前,請先儲存來源副本和復原點;不要要求代理程式一次重設所有變更。如果檢查失敗,請將錯誤和來源副本進行比較,這有助於判斷問題是移轉造成的,還是原本就存在的缺陷。

當所需版本的來源檔案已到位、環境已還原、必要資料可在安全的測試環境中使用、檢查均通過,而且 Hermes 正在這個確切資料夾中運作時,就可以視為移轉完成。讓訪客能夠使用此應用程式是後續的另一個階段,不屬於這項檢查的範圍。

認識 Ailoot。

更多詳情

常見問題:將 Codex 專案移至伺服器上的 Hermes

複製 Git 儲存庫會轉移整個工作環境嗎?

不會。Git clone 不含忽略檔、外部資料庫、上傳資料、機密或代理聊天歷史。應依專案指示另外還原必要相依套件及允許的測試資料。

編輯伺服器副本之前,該比較什麼?

對照來源副本的已存分支與提交識別碼、檢查未提交變更,並讓 Hermes 確認實際工作目錄。再在該確切副本執行專案既有檢查。

所有文章