2024-04-02|閱讀時間 ‧ 約 24 分鐘

後端技術考古題-開發工具 下篇(四)

    ※ Git(四)

    1. 空的資料夾無法被加入 Git 進行版本控制,但這個資料夾如果又是很重要的資料夾,你會怎麼處理?

    當空的目錄無法被加入 Git 進行版本控制時,有以下的做法可以解決

    • 在那個空目錄裡隨便放一個檔案就行了。
    • 在這個資料夾中添加一個名為 .gitkeep 的空檔案,讓 Git 能「感應」到這個目錄的存在。
    touch important_folder/.gitkeep

    再查看一下狀態:

    git status
    git add
    git commit
    1. 在 Rails 專案中,config/database.yml 這個檔案裡有資料庫的設定、帳號密碼等資訊,在使用 Git 時,你通常會怎麼處理這類型內容比較敏感的檔案?

    因為我們的 Rails 專案底下掌管三種環境(Production, Development, Test)的數據庫資訊都會放在 config/database.yml。因此在使用 Git 時,面對處理包含敏感資訊的檔案時,可以採取以下幾個方法來確保安全性:

    • 不要將敏感資訊提交到版本控制系統:避免將帳號、密碼等敏感資訊提交到版本控制系統中。
    • 使用環境變數:因為.env 檔案是一種用來存放環境變數的檔案格式,通常用於存放應用程式的設定資訊、API 金鑰、密碼等敏感資訊,可在應用程式中使用這些變數。所以使用 dotenv 或類似的套件可以使 .env 檔案中加載環境變數,而這些環境變數會被加載到 Node.js 的 process.env 中,我們可以在程式中直接存取這些變數。
    • 使用 .gitignore 檔案:在專案根目錄下建立一個 .gitignore 檔案,將 database.yml 或包含敏感資訊的檔案列入忽略清單,使其不會被 Git 追蹤。
    • 使用kubernetes管理:Kubernetes是一個開源的容器管理平台,提供了各種安全機制,包括身份驗證、授權、加密和網絡隔離,以確保應用程式和數據的安全性。
    • 使用加密的版本控制系統或加密檔案:在程式運行時解密。這樣可以保護敏感資訊不被未授權的人看到。
    1. 兩個 branch 各有五十個 commit 要接起來時,極有可能會出現大量的 conflict (衝突),這時你會選擇用 merge 還是 rebase 處理它?哪個可能比較方便(或比較少的衝突)?為什麼?

    在 Git 裡有兩種方法可以用來整合兩個分支,分別是 merge 和 rebase。

    ※ 先了解git merge是什麼?

    git merge 完成新分支後再透過 merge 回 master 或 develop 等主要分支,以便協作和管理代碼庫的開發流程。

    在 merge 的時候會產生兩種情況

    1. 沒有產生衝突,進度直接往前快轉 (fast-forward)。

    例如:

    1. 產生衝突,先修復衝突先修復衝突。

    例如:

    ※ merge特點:

    使用 merge時,每個合併點都會產生一個新的 merge commit,尤其是當出現大量衝突時,merge commit 的數量會多到讓歷史記錄變得複雜和難以理解。

    ※ 先了解git rebase是什麼?

    使用情境:想要重新定義分支的基準點。

    簡單來說,就是將分支上的 commit 逐項與 main 的內容進行合併。如果遇到合併衝突時,還是要先解決合併衝突。

    ※ rebase特點:

    • 合併時不會產生多餘的 commit,處理衝突時以 commit 為單位。
    • rebase 能夠提供一個更清晰的歷史記錄,缺點就是會修改 commit 的歷史紀錄。
    • 在 push 前先做 rebase,就能夠直接以 fast-forward 的方式合併,不需要再另外解衝突。

    ※ 結論:

    個人在 push 到 remote 之前,使用 rebase 會比 merge 更方便,因為它可以讓歷史紀錄更為簡單好閱讀,並且在解決衝突時更容易管理。如果已經把紀錄 push 到 remote時,就只能使用merge,不能隨意修改他人的remote 的紀錄。

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.