消除GitHub上的歷史記錄

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

作爲世界上比較有名的犬種,在將個人的某些賬號信息以及某些資源(捂臉)完全公開之後,內心沒有絲毫波動,甚至有點想笑,我爲什麼會出現這種破問題。

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


方案一:刪庫

方案二:三個步驟,其實前兩步都沒什麼用

首先將當前版本的某些數據刪掉(做完這一步之後突然意識到我可能連有名的犬種都不算);
其次將倉庫設爲私有(此時已經能免費設置私有倉庫了,先謝謝一下微軟),打開GitHub Help,(GitHub對我這種曾經沒用功讀書的人非常不友好,學霸讀到這就可以跳過閱讀原文)
輸入 removing sensitive 的時候,出現了幾個提示引起我的注意:

GitHub Help

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

清除倉庫中的敏感數據

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

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

你也可以使用 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

執行結束後會出現如下結果

執行結果

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

cd repo.git

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

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

$ git push

理論上到這已經是清除掉記錄了,我的提交記錄確實變了,但是還是能找到某些羞羞的數據,因爲之前在第一步的時候將這個文件給刪掉了,於是又把文件提交到倉庫,然後在執行上述步驟,終於危機解除,英雄又一次拯救了世界,散花之前注意到還有執行完jar之後最後有三行文字,讓我在復現一下。

三行話

最後撒花。


使用 filter-branch

由於使用filter-branch還需要提交刪除請求,畢竟要解釋刪除的數據是幹嘛的(捂臉),況且BFG自稱速度是filter-branch的10~720倍。感興趣的同學可以瞭解一下。

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

Sending A Sensitive Data Removal Request

圖中的大概意思是:

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

由於連接GitHub主機的內容以及管理方式的不同,我們需要你提供的信息越具體越好,爲了確保我們覈實用戶並能夠徹底移除敏感數據,我們需要知道從哪開始。

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

你的請求內容應該有:

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

如何提交請求

你可以將刪除請求發送到 [email protected] 或者通過GitHub的 Contact form 提交,請在郵件正文中包含一份純文本格式的請求,郵件攜帶附件的話可能會存在處理延遲。


如需轉載,請註明文章出處:https://segmentfault.com/a/11...
原創不易,感謝支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章