消除GitHub上的歷史記錄

GitHub做爲全球最大的交友平臺而被咱們所熟知,可是咱們有時候會將某些不適當的信息發佈到網絡上去,而GitHub並無良好的交互界面讓咱們能在兩分鐘內撤回錯誤。java

做爲世界上比較有名的犬種,在將我的的某些帳號信息以及某些資源(捂臉)徹底公開以後,心裏沒有絲毫波動,甚至有點想笑,我爲何會出現這種破問題。git

本着萬事開頭難,中間難,結尾難的想法,在被世人所不齒以前,踏上自救之路。github


方案一:刪庫算法

方案二:使用 BFG Repo-Cleaner 刪除(三個步驟,前兩步可直接跳過,着急自救的同窗可直接到 開始刪除數據segmentfault

首先:將當前版本的某些數據刪掉(作完這一步以後忽然意識到我可能連有名的犬種都不算);安全

其次:將倉庫設爲私有(此時已經能免費設置私有倉庫了,先謝謝一下微軟),打開GitHub Help(GitHub對我這種曾經沒用功讀書的人很是不友好,學霸讀到這就能夠跳過閱讀原文),輸入 removing sensitive 的時候,出現了幾個提示引發個人注意:網絡

GitHub Help

最後:刪除敏感數據,文章大概意思以下:app

清除倉庫中的敏感數據

若是你提交了敏感數據,例如密碼或者SSH祕鑰之類的到Git倉庫, 你能夠從歷史中刪掉他們。想徹底刪除不想要的文件歷史記錄你可使用 git filter-branch 命令或者 BFG Repo-Cleaner 開源社區工具。工具

git filter-branch 命令和 BFG Repo-Cleaner 能夠重寫你的倉庫歷史,他們能夠更改目前存在的任何單獨提交記錄的或者有依賴的提交記錄(SHA意思爲哈希算法,可理解爲提交記錄)。修改提交記錄可能會影響正在使用的 pull request,咱們建議在進行清除敏感數據以前進行必要的合併或關閉請求。spa

你也可使用 git rm 命令來刪除文件。關於刪除最新提交文件的信息可移步「Removing files from a repository's history」。

警告:一旦你提交到GitHub,應該考慮到數據可能會受到的任何影響。若是提交了密碼,修改密碼,提交了祕鑰,及時換一個新的。

本文將闡述……(到這已經記不清英語老師長什麼樣了)

清除倉庫的文件歷史記錄

使用 BFG

BFG Repo-Cleaner 是一個由開源社區開發且維護的工具,它提供了比git filter-branch更加簡便快捷的方法來刪除不想要的數據。好比,刪除你文件中的敏感數據且不影響最新的提交,執行:

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

能夠在password.txt中列出全部文原本進行替換,執行:

$ bfg --replace-text passwords.txt

具體使用文檔和下載說明請移步 https://rtyley.github.io/bfg-...


開始刪除數據

讀到這正文終於要開始了,但GitHub惜字如金,好在BFG託管在GitHub上,在官網上下載bfg.jar,並安裝Java環境,Java環境的安裝很是簡單,我就不在此說明了。

首先克隆你的項目,並使用--mirror

$ git clone --mirror git://example.com/repo.git

克隆完後接着就能夠執行以前下載的bfg.jar,將jar放到克隆項目後的文件夾內,和repo.git(此處項目名會不一樣)同級,YOUR-FILE-WITH-SENSITIVE-DATA是你包含敏感信息的文件名,不用寫明路徑:

java -jar bfg.jar --delete-files YOUR-FILE-WITH-SENSITIVE-DATA repo.git

執行結束後會出現以下結果(咱們以刪除application.yml文件爲例)

執行結果

進入到repo.git下,咱們還需執行git gc命令:

cd repo.git

$ git reflog expire --expire=now --all && git gc --prune=now --aggressive

最後,咱們將修改結果提交:

$ git push

理論上到這已是清除掉記錄了,個人提交記錄確實也變了,可是仍是能找到某些羞羞的數據,由於以前在第一步的時候將這個文件給刪掉了,因而又把文件提交到倉庫,而後在執行上述步驟,終於危機解除,英雄又一次拯救了世界,散花以前還想提醒一下,執行完 bfg-1.13.0.jar 及相關命令後結果會有幾行「奇怪」的文字,讓我再復現一下。

奇怪文字

最後撒花(下文主要翻譯了刪除敏感數據策略的部份內容,該策略主要針對filter-branch)。


使用 filter-branch

因爲使用filter-branch還須要提交刪除請求,畢竟要解釋刪除的數據是幹嗎的(捂臉),何況BFG自稱速度是filter-branch的10~720倍。感興趣的同窗能夠對下面這種複雜的方法瞭解一下。

如下是數據移除策略的部份內容,官方列舉了什麼是敏感數據以及一些注意事項,以及解釋了GitHub如何移除這些數據,還有如何發送移除數據請求以及請求內容應包含事項(下圖)等。

Sending A Sensitive Data Removal Request

圖中的大概意思是:

發送一份刪除敏感數據的請求

因爲鏈接GitHub主機的內容以及管理方式的不一樣,咱們須要你提供的信息越具體越好,爲了確保咱們覈實用戶並可以完全移除敏感數據,咱們須要知道從哪開始。

如下幾點簡單說明了移除敏感數據的步驟。

你的請求內容應該有:

  1. 每個包含敏感數據的文件都有一個能正常指向該文件的連接。(注意,GitHub不能經過搜索結果,示例以及截屏來處理你的請求)
  2. 詳細說明你的每一個文件中敏感數據所在的行數。
  3. 簡要描述敏感信息可能帶來的風險,而且着重說明它是如何產生安全風險的
  4. 若是你是第三方或者其餘代理機構所面臨安全風險,請提供合法的受權代表你有執行權利。
  5. 可選項:讓GitHub知道在刪除數據請求前所面臨的緊急狀況和緣由,咱們會盡快處理你的刪除請求;若是你的請求對時間敏感性有特殊的要求,例如公開最近的憑證等,請作出解釋。

如何提交請求

你能夠將刪除請求發送到 support@github.com 或者經過GitHub的 Contact form 提交,請在郵件正文中包含一份純文本格式的請求,郵件攜帶附件的話可能會存在處理延遲。


原創不易,感謝支持。

相關文章
相關標籤/搜索