2013-02-01 132 views
0

當我的開發團隊使用git進行提交時,有時他們會在新環境中執行此操作。發生這種情況時,他們的git配置沒有正確設置,並且他們使用默認的「root @ localhost.localdomain「作者姓名。這在git日誌方面非常煩人。我們可以通過流程消除這種情況,但有時人爲錯誤是不可避免的。如何修復git log作者姓名?

有沒有辦法改變那些不正確的作者姓名或有辦法在提交之前強制執行正確的作者姓名?例如,我可以設置授權作者列表,不使用作者姓名的任何人不能提交。

+0

閱讀[Git Hooks](http://git-scm.com/book/en/Customizing-Git-Git-Hooks)。你甚至可以找到那些已經做到了你想要的。 – vanza

+0

你也可以使用[git filter-branch](http://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html)更改提交的作者。 –

回答

0

像這樣重寫git歷史的問題是,一旦你改變了一次提交,所有依賴它的提交也會改變。換句話說,如果你想保留所有的提交ID在你試圖改變的後面,你不能改變你想改變的提交。

如果你是搞亂了提交的標識下面要更改的一個,你可以使用這樣的配方改變的細節OK的承諾:

git filter-branch -f --env-filter ' 
if [ $GIT_COMMIT = %COMMITID% ] 
then 
    export GIT_AUTHOR_DATE="YYYY-MM-DD hh:mm:ss z" 
    export GIT_COMMITTER_DATE="YYYY-MM-DD hh:mm:ss z" 
    export GIT_AUTHOR_NAME="Name" 
    export GIT_AUTHOR_EMAIL="[email protected]" 
    export GIT_COMMITTER_NAME="Name" 
    export GIT_COMMITTER_EMAIL="[email protected]" 
fi 
' -- %COMMITID%~..HEAD 

其中`%的commitid%是替換爲您想要更改的提交ID。例如:

git filter-branch -f --env-filter ' 
if [ $GIT_COMMIT = 1234567890ABCD ] 
then 
    export GIT_AUTHOR_DATE="2000-01-01 00:00:00 -0500" 
    export GIT_COMMITTER_DATE="2000-01-01 00:00:00 -0500" 
    export GIT_AUTHOR_NAME="Name" 
    export GIT_AUTHOR_EMAIL="[email protected]" 
    export GIT_COMMITTER_NAME="Name" 
    export GIT_COMMITTER_EMAIL="[email protected]" 
fi 
' -- 1234567890ABCD~..HEAD 

警告!同樣,你不僅要改變那個提交,還要改變每一個提交。

  • 因爲上面你會有現在的「邪惡雙胞胎」「鬼」「老」的提交樹仍然四處遊走。您可以清理與:

    git的過濾分支-f --env過濾器「​​」 - %的commitid%〜..HEAD

  • 你將不得不改寫新提交遠程分支,簡單地推它不會工作 - 遠程服務器會抱怨。無論是 「力」,或者你把之前改寫分支了刪除遠程分支:

    混帳推remote_address_or_name:branch_name

例子:

git push origin :feature_a 
  • 你將不得不作出所有其他團隊成員都在新樹之上重新組合。而且他們可能不得不採取類似git fetch --all -p的行動來清理其重寫的遠程分支的本地歷史記錄,然後才能在其上進行重新綁定。

基於上述,你在一些服務器端pre-receive的鉤子停止push包含違規承諾,並告知團隊成員如何使用上述filter-branch魔法擺脫其犯罪的提交更好看消息。