簡體   English   中英

如何從GitHub完全刪除敏感提交?

[英]How to completely remove sensitive commits from GitHub?

幾天前,我讀了一篇有關Github隱私基礎的文章,文章說提交者的電子郵件可以通過簡單的Github API請求看到。

我設置了電子郵件別名,但是我想更改過去提交的電子郵件。 嘗試使用站點和.gitconfig的別名

change-commits = "!f() { VAR1=$1; VAR='$'$1; OLD=$2; NEW=$3; 
  echo \"Are you sure for replace $VAR $OLD => $NEW ?(Y/N)\";
  read OK;
  if [ \"$OK\" = 'Y' ] ; 
  then shift 3; 
  git filter-branch --env-filter \"if [ \\\"${VAR}\\\" = '$OLD' ]; 
  then export $VAR1='$NEW';echo 'to $NEW'; fi\" $@; fi;};f " 

之后,當我輸入git log並且每次提交都有新郵件時,但是在API調用https://api.github.com/users/(usuername)/events/public之后,我會看到新舊電子郵件

如前所述 ,您不能真正“更改”提交,只能使用相同或相似的數據創建一個新的提交。 因此,當您執行git filter-branchgit rebase或任何其他形式的amend時 ,您仍在創建新的commit

並且在運行git push -f ,唯一的區別是遠程分支引用是強制更新的 它仍然會發送新的提交,而舊的提交(如果有的話)要做什么由遠程存儲庫決定。

對於GitHub ,當您執行強制推送時,它不會立即從存儲庫中刪除那些舊提交。

來自GitHub官方幫助

警告:將提交推送到GitHub后,您應該考慮其中包含的所有數據都將被泄露。 如果您輸入了密碼,請更改它! 如果提交了密鑰,請生成一個新密鑰。

本文告訴您如何通過GitHub存儲庫中的任何分支或標簽使敏感數據的提交不可訪問。 但是,請務必注意,仍可以直接通過GitHub上緩存視圖中的SHA-1散列並通過引用它們的任何拉取請求,在存儲庫的任何克隆或分支中仍可訪問這些提交。 您無法對存儲庫的現有克隆或分支進行任何操作,但可以通過聯系GitHub支持永久刪除存儲庫的所有緩存視圖並在GitHub上提取請求。

因此,要使舊的提交在合理的時間范圍內停止出現在API中,唯一的選擇是:

警告 :雖然前一個選項速度更快 ,但也會刪除 Wiki問題評論


注意 :這里有關於懸掛提交的含義的更全面的解釋:

https://stackoverflow.com/a/32840254/10095231

我會為此使用git bfg。

效果很好,並且易於使用。 它將完全刪除您需要從git歷史記錄中刪除的內容。

Git BFG文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM