大家好,我是小富~
說個事吧!最近公司發生了一個事故,有同事不小心把敏感資料上傳到了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官方的Git使用者端工具GitHub Desktop
,這個工具專門用來管理GitHub倉庫,潔面簡潔使用也很方便,主打一個輕量。
有一點比較好,在提交程式碼時,如果提交的使用者資訊與當前賬號GitHub資訊不一致還會有提示,這樣就不怕誤用其他資訊提交了。
如果大家平時會維護自己的GitHub倉庫,建議一定一定要仔細的檢查提交的程式碼,像註釋裡的公司郵箱資訊、程式碼包路徑中的公司標識,凡事涉及公司資訊的資料一概去除,不要惹一些不必要的麻煩,資料洩漏這種重可大可小不是鬧著玩的。
還有GitHub別留太多的個人資訊,手機號郵箱就別放了,頭像也別傻乎乎的放個自己大頭貼,給自己留點回旋的餘地。核心思工作和生活要隔離!!!
我是小富~ 下期見