轉載的這篇文章:https://blog.csdn.net/diu_brother/article/details/51982993
作用一名程序員,我們會經常混跡與不同的代碼倉庫,時常不同倉庫會有作者信息驗證。比如公司內建的gitlab一般會要求統一使用公司內部的域賬號簽名;github要求使用github賬號簽名等。因此,很容易犯在不同庫中提交代碼發現默認配置的author信息沒有變更,結果push被拒絕。
下面介紹幾種常用的解決方式,當然最終還是需要養成切換代碼庫檢查author信息的習慣,主動配置
// 設置全局
git config --global user.name "Author Name"
git config --global user.email "Author Email"
git config --global user.name "小旋風"
git config --global user.email "1945605733@qq.com"
// 或者設置本地項目庫配置
git config user.name "Author Name"
git config user.email "Author Email"
git config user.name "小旋風"
git config user.email "1945605733@qq.com"
如果是多個修改,那么就需要使用到git filter-branch這個工具來做批量修改
為了方便大家使用,封裝了一個簡單的shell腳本,直接修改[XXX]中的變量為對應的值即可
創建腳本需要的命令鏈接
新建一個.sh文件:
命令:touch test.sh
編輯文件:
命令:vi test.sh
然后鍵入i,輸入內容,
然后鍵入esc
鍵入:wq保存退出
給test.sh賦予可執行權限
命令:chmod +x test.sh
執行腳本./test.sh,即可執行腳本
也可以通過sh test.sh 執行腳本
腳本內容
#!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_COMMITTER_EMAIL" = "[Your Old Email]" ]
then
cn="[Your New Author Name]"
cm="[Your New Email]"
fi
if [ "$GIT_AUTHOR_EMAIL" = "[Your Old Email]" ]
then
an="[Your New Author Name]"
am="[Your New Email]"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
這是我使用的腳本,替換上面腳本的時候記得把中括號 [] 去掉
我就是沒有把中括號去掉,踩了半個小時坑
#!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_COMMITTER_EMAIL" = "Your Old Email" ]
then
cn="小旋風"
cm="1945605733@qq.com"
fi
if [ "$GIT_AUTHOR_EMAIL" = "Your Old Email" ]
then
an="小旋風"
am="1945605733@qq.com"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
最后最后
通過git push --force強行推送修改后的 log 信息。