---
title: "程式碼引用與匹配"
description: "說明 GitHub Copilot 程式碼引用如何處理公開程式碼匹配、來源日誌、許可證和團隊審查邊界。"
verifiedAt: "2026-05-06"
---

程式碼引用（code referencing）不是“合規提示彈出視窗”，而是 Copilot 進入真實團隊後必須懂的來源審查機制。GitHub 官方說明：Copilot 會檢查建議是否匹配公開可用程式碼；匹配會被丟棄，或以 code reference 形式展示，具體取決於個人、組織或企業策略。

這頁只講判斷和流程。它不能替代法律意見，但能幫團隊把“看到相似程式碼提示以後做什麼”寫成可執行動作。

> [!TIP]
> **閱讀目標**：讀完本章，你應該能解釋 code reference 什麼時候出現、看哪些資訊、怎麼決定保留、改寫或移除建議。

## 1. 什麼時候會出現

官方 code referencing 頁把觸發場景分成幾類：

- 你接受了一個與公開 GitHub 儲存庫程式碼匹配的 inline suggestion。
- Copilot Chat 的回答包含與公開程式碼匹配的程式碼。
- GitHub.com 上的 Copilot Chat 返回了包含匹配程式碼的回答。
- Copilot cloud agent 生成了與公開程式碼匹配的程式碼，資訊出現在 agent session logs。

```mermaid
flowchart TD
    Suggestion["Copilot 生成程式碼"] --> Match{"匹配公開程式碼?"}
    Match -->|否| Normal["正常 diff / test 審查"]
    Match -->|是| Policy{"策略允許展示匹配?"}
    Policy -->|阻止| Discard["建議被丟棄或不展示"]
    Policy -->|允許| Reference["顯示 code reference"]
    Reference --> Review["檢視來源 URL / license"]
    Review --> Decision{"是否保留?"}
    Decision -->|保留| Attribute["按團隊策略處理 attribution"]
    Decision -->|改寫| Rewrite["改寫並重新審查"]
    Decision -->|移除| Remove["刪除程式碼"]

    style Reference fill:#fef3c7,stroke:#d97706,stroke-width:2px
    style Review fill:#dbeafe,stroke:#2563eb,stroke-width:2px
    style Remove fill:#fee2e2,stroke:#dc2626,stroke-width:2px
```

## 2. Code reference 會給什麼資訊

當 inline suggestion 匹配公開程式碼並被接受時，官方文件說明會記錄匹配資訊。日誌裡包含：

- 包含匹配程式碼的檔案 URL。
- 如果識別到許可證，會包含 license name。
- 用於決定是否 attribution、改寫或移除程式碼的來源線索。

Chat 場景中，如果回答裡的程式碼匹配公開儲存庫，介面會在回答末尾或輸出位置給出檢視匹配詳情的入口。不同 IDE 和 GitHub.com 的展示位置不同，但審查邏輯一致。

## 3. 不要誤解它的範圍

官方頁面給出幾個關鍵限制：

- Inline suggestion 的 code referencing 只發生在你接受 Copilot 建議後。
- 你自己寫的程式碼不會被這個機制檢查。
- 你改過的 Copilot 建議也不會被同樣方式檢查。
- 匹配通常不頻繁，不應該期待每次都有 reference。
- 匹配搜尋使用公開 GitHub 儲存庫索引，不包括私有 GitHub 儲存庫，也不包括 GitHub 外部程式碼。
- 搜尋索引每隔幾個月重新整理一次，因此新提交、已刪除或已移動程式碼可能存在時間差。

這些限制意味著：沒有提示不等於沒有風險；有提示也不等於一定不能用。它只是審查輸入之一。

## 4. 團隊處理流程

建議把 code reference 寫進團隊 code review checklist：

1. 出現 reference 後，先開啟來源 URL。
2. 記錄 license name，如果沒有識別到許可證也要標記為 unknown。
3. 判斷程式碼是否是通用樣板、短片段、演算法實現還是實質性複製。
4. 根據團隊策略選擇保留並 attribution、改寫、替換依賴或移除。
5. 在 PR 裡說明處理結果，避免 reviewer 重新追問。

不建議的處理方式：

- 看到 reference 直接忽略。
- 只相信 Copilot 的自然語言解釋，不看來源。
- 把“出現機率低”理解成“不需要流程”。
- 用改幾個變數名來規避來源審查。

## 5. 和 public code policy 的關係

程式碼引用和 Suggestions matching public code 策略要一起看：

- 如果策略阻止匹配公開程式碼，相關建議可能不會展示。
- 如果策略允許展示匹配，開發者要承擔檢視來源和許可證的責任。
- 組織或企業策略可能由管理員統一配置。
- 這個策略不因為切換 inline suggestion 模型而失效。

商業專案更適合把策略寫清楚，而不是讓每個開發者臨場判斷。

<details>
<summary>深讀：為什麼“無 reference”不能當作合規結論</summary>

Code referencing 依賴公開 GitHub 儲存庫索引、匹配演算法和觸發條件。官方限制已經說明，私有儲存庫、GitHub 外部程式碼、新近變動程式碼，以及你自己寫或改寫的內容不在同一個檢查範圍裡。

所以它是風險提示機制，不是完整 IP 掃描。正式釋出前仍然應該結合依賴審查、許可證掃描、安全掃描和人工 review。
</details>

## 本章自檢

完成本章後，用這 4 個問題檢查：

1. 團隊是否允許顯示 matching public code？
2. 出現 code reference 時，誰負責看來源 URL 和許可證？
3. PR 裡是否記錄了保留、改寫或移除的決策？
4. 沒有 reference 時，是否仍然保留普通程式碼審查和 license 掃描？

透過標準：你能把 code reference 從“提示資訊”變成團隊可複核的處理流程。

## 官方來源

- [GitHub Copilot code referencing](https://docs.github.com/en/copilot/concepts/completions/code-referencing) —— 官方概念頁，覆蓋觸發場景、日誌資訊、匹配方式和限制。
- [GitHub Copilot code suggestions in your IDE](https://docs.github.com/en/copilot/concepts/completions/code-suggestions) —— 官方程式碼建議頁，說明 Suggestions matching public code 策略與建議展示的關係。
- [Finding public code that matches GitHub Copilot suggestions](https://docs.github.com/en/copilot/how-tos/get-code-suggestions/find-matching-code) —— 官方操作入口，用於進一步檢視匹配程式碼。

## 接下來去哪

<Cards>
  <Card title="提示詞寫法" description="繼續學習如何減少模糊 prompt 和不必要的匹配風險。" href="/zh-Hant/docs/github-copilot/official/02-code-suggestions-and-chat/prompt-engineering" />
  <Card title="安全、治理與計費" description="繼續把 public code policy 放進組織治理。" href="/zh-Hant/docs/github-copilot/official/08-security-governance" />
</Cards>
