2023年8月16日 星期三

git 更改歷史節點內容的方式 .gitignore filter-branch filter-repo

 git 時候, 有時.gitignore 新增規則跳過重新走過 rm -r 項目, 重新 add . > commit -m "name" > push
卻發現項目一直沒移除, 原因在於因為歷史節點的紀錄沒有移除

#環境安裝

查詢後發現要使用filter-branch但是官方來看目前是改為推薦使用filter-repo, 以下範例是從python pip 下載安裝

首先可以去python官網下載最新的3版, 然後cd到你的路徑
例如  cd C:\Users\使用者名稱\Documents\python-3.11.4-embed-amd64\

接著python3 想看有什麼指令時候會開啟window store要你安裝python 3app

然後使用 python3 -m pip install --user git-filter-repo 就可以下載 fileter-repo

這時候會跳出提示path不對,這時候需要去環境下添加

windows11為例, 在搜尋中尋找"編輯系統環境變數" > "環境變數" > 可以在使用者變數地方先點擊PATH然後點擊編輯, 這時候點擊新增添加下面項目

C:\Users\使用者名稱\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts

添加完重新開啟terminal, 這時git filter-repo 就可以使用

#filter-repo使用

範例來說舉例要移除歷史build/相關, 可以使用下面方式
git filter-repo --path  build/ --invert-paths
invert-paths 是倒置只保留build/以外
這時候應該會提示建議你clone一份處理比較安全, 假設在團隊溝通跟確定要做什麼下可以給--force這個權限很大的指令
git filter-repo --path  build/ --invert-paths --force
那就會執行

跑完時候就可以push, 這邊如果要讓平台的例如build/移除在push時候需要添加 --force
當然這指令一樣要先明確知道在做什麼下使用, 範例
git push github main --force
到這, 平台的build/應該就會不見了
#要注意電腦端的檔案也可能會有所更動