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

大家好,我是小富~

說個事吧!最近公司發生了一個事故,有同事不小心把敏感數據上傳到了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="程序員小富 <[email protected]>" --no-edit

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

 git push origin master

批量修改

Git官網提供了很多種修改提交記錄信息的方法,這裏主要介紹下filter-branch,它可以通過腳本的方式批量修改歷史提交記錄信息。

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

  • 全局修改郵箱地址;
  • 從每一個提交中移除一個文件;
  • 使一個子目錄做爲新的根目錄

用法

歷史提交記錄中有很多用戶名xiaofu提交的記錄,現在使用filter-branch批量將他們改寫成程序員小富

以下是官網提供的腳本,其邏輯很簡單:如果遇到用戶名爲xiaofu的提交記錄,將該提交記錄的用戶名和郵箱修改爲程序員小富[email protected]

git filter-branch --commit-filter '
        if [ "$GIT_AUTHOR_NAME" = "xiaofu" ];
        then
                GIT_AUTHOR_NAME="程序員小富";
                GIT_AUTHOR_EMAIL="[email protected]";
                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別留太多的個人信息,手機號郵箱就別放了,頭像也別傻乎乎的放個自己大頭貼,給自己留點回旋的餘地。核心思工作和生活要隔離!!!

我是小富~ 下期見

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