iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0

前言

版本控制系統(VCS)是整個 CI/CD 體系的骨幹。
隨著專案生命週期的演進,倉庫的體積往往會因歷史累積、大型二進位檔案或複雜的依賴關係而急劇膨脹。如果缺乏完善的倉庫管理策略,將直接導致 CI 流程中的 Checkout 時間過長,進而大幅拉低交付效率,並增加雲端資源的消耗成本。

本篇將探討三種維繫 Git 倉庫健康度的核心技術:Git LFS、Git 子模組(Submodules)以及進階的 .gitignore 安全配置。

為何倉庫體積決定了 CI/CD 的成敗?

在現代化 workflow 中,速度是核心指標之一。一個體積龐大且雜亂的倉庫會帶來以下後果:

  • CI 效能瓶頸:每次自動化流程啟動時,Runner 都需要拉取程式碼。若倉庫包含大量不必要的二進位檔案,網路 I/O 將成為流程中最耗時的環節。

  • 安全性風險:若敏感配置(Secrets)被意外提交至 Git 歷史中,即便後續刪除,其蹤跡仍留存在歷史紀錄中,造成難以挽回的洩漏。

  • 協作負擔:開發者在 Clone 或 Push 程式碼時的等待時間增加,降低了整體的開發體驗。

核心技術實踐與優化策略

1. Git LFS (Large File Storage):二進位檔案的解決方法

  • 技術解析: Git 的底層設計擅長處理文字檔案的差異(Diff),但在處理大型二進位檔案(如編譯產物、機器學習模型、高畫質素材)時效能極差。Git LFS 的運作機制是將這些大型檔案轉移至外部儲存,而在 Git 倉庫中僅保留微小的「指標文件(Pointer files)」。

  • 為何使用? 確保 .git 目錄維持在輕量狀態,讓 CI Runner 僅需下載當前版本所需的二進位檔案,而非整個歷史版本。

  • 實戰操作與追蹤策略

    Bash

    # 安裝 LFS 擴展(僅需執行一次)
    git lfs install
    
    # 定義需要追蹤的大型檔案類型
    git lfs track "*.onnx"   # 機器學習模型
    git lfs track "*.mp4"    # 影片資源
    git lfs track "*.jar"    # 二進位相依項
    
    # 查看當前追蹤清單
    git lfs status
    

2. Git Submodules:跨專案的代碼重複使用

  • 技術解析: 當多個專案需要共享核心元件或基礎設施配置時,直接複製代碼會導致版本 Code Drift。Git 子模組允許將另一個 Git Repo 嵌入為子目錄,並精確鎖定特定的 Commit ID。

  • 為何使用? 實踐 DRY(Don't Repeat Yourself)原則,同時保持各組件的獨立開發生命週期。

  • CI/CD 關鍵配置: 在 CI 腳本中,必須顯式告知 Runner 需要遞迴拉取子模組,否則構建流程將因缺少相依項而中斷。

    # GitHub Actions 範例
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive' # 強制遞迴拉取所有子模組
    

3. 進階 .gitignore 與 Security-as-Code

  • 技術解析.gitignore 除了能過濾雜訊,也是安全性防禦的第一道關卡。透過精確定義過濾規則,我們能防止本地端環境、編譯產物及最關鍵的敏感金鑰進入版本控制。

  • .gitignore 模板建議

    # --- 系統與編譯產物 ---
    dist/
    build/
    *.pyc
    node_modules/
    
    # --- 安全性敏感(絕對禁止提交) ---
    .env
    .env.local
    *.p12
    *.pem
    id_rsa
    secrets/
    
    # --- IDE 與本地端配置 ---
    .vscode/
    .idea/
    .terraform/
    .vagrant/
    
  • 安全警示:秘密資訊管理(Secret Management) 雖然 .gitignore 能防止檔案被提交,但人為疏忽難以完全避免。我們強烈建議:

    • 引入掃描工具:在 CI 流程中加入 gitleakstrufflehog,自動檢測是否有金鑰意外洩漏。

    • 秘密分離:所有敏感資訊應存放於專門的秘密管理平台(如 HashiCorp Vault、AWS Secrets Manager),並在運行時透過環境變數動態注入。

結語

一個結構清晰、效能優化的 Git 倉庫是穩定 CI/CD 流程的基石。透過 LFS 優化效能、子模組強化重用、.gitignore 守護安全,我們為後續的自動化流程建立了一個高品質的資料來源。


上一篇
Day 05 團隊協作:建立 Git workflow 與提交訊息標準化
下一篇
Day 07 整潔的歷史:團隊首選 Squash and Merge
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言