針對 C++ 的 GitHub Copilot 現代化功能進行疑難排解

本文將協助你解決使用 GitHub Copilot 現代化升級 C++ 專案時的常見問題。 如果你遇到這裡沒提到的問題,請在Visual Studio中使用 Help>Send Feedback>Report a problem

開始之前

確認你的解決方案或專案是否可成功建置

對於 MSVC 升級情境,代理程式會透過建置您的解決方案或專案來驗證變更。 如果你的解決方案或專案在開始前就已經壞掉,客服人員將更難區分既有問題與升級帶來的問題。

如果你有已知的建置問題,請用 自訂說明來記錄,當代理在評估階段要求上下文時,在回應中提供,或是加進 scenario-instructions.md 去讓代理知道可以忽略它們。

提交或儲存未提交的工作

從一個乾淨的工作目錄開始。 代理程式在運作時會進行提交,而把未提交的變更與代理程式所做的修改混在一起,會使審查或還原變更加困難。

git stash
git status

備份非 Git 倉庫

代理程式也能處理非原始碼控制的資料夾。 如果你的專案不在 Git 倉庫裡,代理程式會跳過分支和提交操作。 開始前先備份專案資料夾,這樣需要時可以還原。

Tip

即使你沒有推送到遠端,也可以考慮在開始前先初始化一個本地的 Git 倉庫。 這可讓你回復個別變更,並逐步追蹤進度。

範例:

git init
git add
git commit -m "Initial Commit"

當你和代理程式都完成後,如果你不想繼續使用 git,只要確認你工作樹中目前的程式碼就是你想要的,然後刪除你執行 git init 的目錄中的 .git 目錄。

常見問題

Agent 不會出現在 Copilot Chat 裡

Symptoms:在GitHub Copilot聊天視窗輸入@Modernize不會啟動代理,或Modernize不會出現在方案總管的右鍵選單中。

解決方案:

  1. 請在 Help>關於 Microsoft Visual Studio 中確認 Visual Studio 版本為 18.7 或更新版本。
  2. 請檢查狀態列中的 Copilot 圖示,確認 GitHub Copilot 是否已啟用。
  3. 請確認該功能已在 Tools>Options>GitHub>Copilot>C/C++ 中啟用。 接著選取 啟用 GitHub Copilot 的 C++ 現代化功能
  4. 更改設定後請重新啟動 Visual Studio。

特工陷入了循環

症狀:客服反覆嘗試同樣的修復方法,卻沒有進展。

解決方案:

  • 在 Copilot Chat 提示視窗中按一下取消按鈕以停止代理程式,在提示中描述你觀察到的情況,然後送出提示以讓代理程式繼續執行。
  • 提供手動修正,並告訴客服你改了什麼。 代理人會從你的糾正中學習。
  • 請代理人嘗試不同的方法。 例如,在GitHub Copilot聊天視窗輸入:」這個修正不行。試試不同的策略。」
  • 如有需要,請還原或復原上一個變更,然後重新開始任務。

大型解法耗時太久

症狀:大型解決方案升級時需要非常長的時間,或似乎停滯不前。

解決方案:

  • 先從一個具代表性的試點專案開始。 這會早期揭露系統性問題。
  • 透過在.github/upgrades/{SCENARIO ID}中檢視tasks.md來監控進度。
  • 如果某場次逾時,請重新開始一個新場次。 代理人從中斷的地方繼續。

復甦策略

撤銷所有變更

如果你使用 Git 分支進行升級,請將所有變更還原:

git checkout your-original-branch
git branch -D upgrade-branch

你的原始程式碼是未被修改的。

復原上一個變更

還原最近的提交:

git revert HEAD

或者告訴經紀人, Revert the last change.

從特定階段重新開始

如果客服的計畫無法運作,請從較早的階段重新開始,發送類似的提示:

  • Let's redo the plan. I want a different approach to the conformance issues.
  • Go back to the assessment and reconsider the upgrade strategy.

重新開始

刪除資料夾 .github/upgrades/{SCENARIO ID} ,然後開始和客服人員的新對話。 它從零開始。

尋求幫助

如果你無法解決問題:

  1. 在Visual Studio中使用 Help>Send Feedback>Report a problem
  2. 如果可以,請包含來自 .github/upgrades/{SCENARIO ID}execution-log.md 內容。