公司敏感資料被上傳Github,嚇得我趕緊改提交記錄

碼農談IT發表於2023-12-12

大家好,我是小富~

說個事吧!最近公司發生了一個事故,有同事不小心把敏感資料上傳到了GitHub上,結果被安全部門掃描出來了。這件事導致公司對所有員工進行了一次資料安全的培訓。對於這個事我相信,有點工作經驗的人都不會故意去上傳這些敏感檔案,多數應該是誤操作導致的。

這個事件也給了提了個醒,我平時會寫部落格用GitHub比較多,嚇得我趕緊對自己所有的GitHub倉庫進行了排查,慶幸沒有提交過敏感資訊的記錄。但我注意到在過往的提交記錄中,有使用公司的Git賬號資訊提交過程式碼,TMD這就很難受了。

避免後續產生不必要的麻煩,我決定修改一下提交記錄中涉及公司的資訊。

注意:以下操作只限於用在自己的Git倉庫,別在公司的專案裡秀,切記!

設定使用者資訊

Git進行版本控制的時候,每次的程式碼提交記錄中都包含使用者的使用者名稱和郵箱,這些資訊在你進行每一次提交時都會被記錄下來。我們保不齊會錯誤地使用了錯誤的資訊,或者需要改用另一個郵箱地址。那這種情況,我們就需要更改我們提交記錄中的使用者名稱和郵箱。

可以透過全域性設定或者特定倉庫設定兩種方式來修改我們提交時的使用者資訊。

全域性

全域性設定可以影響所有的程式碼提交。如果你在全域性範圍內設定了使用者名稱和郵箱後,除非你在特定的專案中覆蓋這個設定,否則這個設定會作為預設設定應用於所有的提交。

git config --global user.name "程式設計師小富"
git config --global user.email "郵箱資訊"

你可以透過如下的命令來檢視Git的全域性配置:

git config --global -l

特定倉庫

如果你只想修改某個特定倉庫的使用者資訊,可以在特定倉庫的根目錄下進行如下操作,Git會將設定得使用者名稱和郵箱僅應用於當前倉庫。

git config user.name "程式設計師小富"
git config user.email "郵箱資訊"

篡改提交記錄

單條修改

Git提供了amend命令,可以用來修改最新的提交記錄。注意,這個命令只會修改最近一次的提交,它能實現以下的功能:

  • 修改提交資訊
  • 新增漏掉的檔案到上一次的提交中
  • 修改之前提交的檔案

用法

它的使用方法比較簡單,直接替換使用者名稱、郵箱資訊,或者如果已經修改了倉庫的使用者資訊,直接執行命令重置。

# 替換使用者名稱、郵箱資訊
git commit --amend --author="{username} <{email}>" --no-edit

# 如果已經修改了倉庫的使用者資訊,直接執行命令重置
git commit --amend --reset-author --no-edit

看到最近一次提交的使用者名稱是xiaofu,不是我的個人資訊程式設計師小富,使用amend命令修改一下。

效果

執行命令後最近一次的提交資訊從xiaofu變更到了程式設計師小富,更改成功和預期的效果一致。

git commit --amend --author="程式設計師小富 <515361725@qq.com>" --no-edit

修改完成之後,別忘了推送到遠端倉庫。

 git push origin master

批次修改

Git官網提供了很多種修改提交記錄資訊的方法,這裡主要介紹下filter-branch,它可以透過指令碼的方式批次修改歷史提交記錄資訊。

filter-branch 它能實現如下的功能,正好符合我們要批次修改歷史提交記錄中使用者、郵箱的需求。

  • 全域性修改郵箱地址;
  • 從每一個提交中移除一個檔案;
  • 使一個子目錄做為新的根目錄

用法

歷史提交記錄中有很多使用者名稱xiaofu提交的記錄,現在使用filter-branch批次將他們改寫成程式設計師小富

以下是官網提供的指令碼,其邏輯很簡單:如果遇到使用者名稱為xiaofu的提交記錄,將該提交記錄的使用者名稱和郵箱修改為程式設計師小富515361725@qq.com

git filter-branch --commit-filter '
        if [ "$GIT_AUTHOR_NAME" = "xiaofu" ];
        then
                GIT_AUTHOR_NAME="程式設計師小富";
                GIT_AUTHOR_EMAIL="515361725@qq.com";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

為了方便操作,建立一個指令碼modifyCommit.sh,放在專案的根目錄執行。

chmod +x modifyCommit.sh
sh modifyCommit.sh

執行指令碼後稍作等待,出現如下的輸出說明已經在執行修改操作了。

執行完畢看到歷史提交記錄中的使用者名稱xiaofu全都變更成了程式設計師小富,說明指令碼生效了。

如果沒有修改成功,可以再次執行,但會出現錯誤提示A previous backup already exists in refs/original/,說明已經執行過了,執行以下命令清除快取即可再次執行。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

修改完成之後,別忘了推送到遠端倉庫。

 git push origin master

GitHub工具

管理GitHub專案,我推薦大家使用GitHub官方的Git客戶端工具GitHub Desktop,這個工具專門用來管理GitHub倉庫,潔面簡潔使用也很方便,主打一個輕量。

有一點比較好,在提交程式碼時,如果提交的使用者資訊與當前賬號GitHub資訊不一致還會有提示,這樣就不怕誤用其他資訊提交了。

總結

如果大家平時會維護自己的GitHub倉庫,建議一定一定要仔細的檢查提交的程式碼,像註釋裡的公司郵箱資訊、程式碼包路徑中的公司標識,凡事涉及公司資訊的資料一概去除,不要惹一些不必要的麻煩,資料洩漏這種重可大可小不是鬧著玩的。

還有GitHub別留太多的個人資訊,手機號郵箱就別放了,頭像也別傻乎乎的放個自己大頭貼,給自己留點回旋的餘地。核心思工作和生活要隔離!!!

我是小富~ 下期見

相關文章