# Git 相關工具

# BFG Repo-Cleaner - 刪掉某個檔案並清除這個檔案的歷史紀錄

git 最忌諱把密碼或是 key commit 上去,如果不小心 commit 上去又過了很久才發現,除了要 rm 檔案之外還要連同之前的歷史紀錄通通刪除

查了一下發現純粹的 git command 蠻複雜的,但是有一個 BFG Repo-Cleaner (opens new window) 這個工具可以快速地刪除檔案並清除歷史紀錄

# 安裝

Mac 可以用 brew 安裝

brew install bfg

# 使用

移除檔案下面這條指定,就會移除檔案同時清除記錄

bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

# Protected commits

如果要移除的檔案在最新的 commit 裡面,預設會有一個 protected commits 的狀態

Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit 32ag4767 (protected by 'HEAD') - contains 1 dirty file :
	- xxx.json (1.4 KB)

WARNING: The dirty content above may be removed from other commits, but as
the *protected* commits still use it, it will STILL exist in your repository.

要移除這個檔案還要加上 --no-blob-protection 這個參數

bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA --no-blob-protection

# Submodules

如果 git 專案是一個 Submodule 的話,因為 .git 是放在 parent module 裡面,所以還要指定 git repository

bfg ../.git/modules/your_submodule --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

參考資料

贊助商連結
(adsbygoogle = window.adsbygoogle || []).push({});