2012-02-08 109 views
1

我試圖使用重新寫一個回購的歷史:的Git濾波器分支不重寫所有的歷史

git filter-branch -f --env-filter ' 
     an="$GIT_AUTHOR_NAME" 
     am="$GIT_AUTHOR_EMAIL" 
     cn="$GIT_COMMITTER_NAME" 
     cm="$GIT_COMMITTER_EMAIL" 

     if [[ "$GIT_COMMITTER_EMAIL" = jacks* ]] 
     then 
      cn="Jack Slingerland" 
      cm="[email protected]" 
      an="Jack Slingerland" 
      am="[email protected]" 

     fi 

     if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]] 
     then 
      cn="Jack Slingerland" 
      cm="[email protected]" 
      an="Jack Slingerland" 
      am="[email protected]" 
     fi 

     export GIT_AUTHOR_NAME="$an" 
     export GIT_AUTHOR_EMAIL="$am" 
     export GIT_COMMITTER_NAME="$cn" 
     export GIT_COMMITTER_EMAIL="$cm"' 
-- --all 

命令運行正常,並按規定重寫作者。問題是它似乎錯過了歷史上的一些條目。我認爲這是在分支所做的更改合併後發生的,但我不確定。

注意:這是一個使用Git + SVN導入Git的SVN存儲庫。

回答

1

我不認爲你的條件正在檢查你想要的。切忌:

if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]] 

if [[ "$GIT_AUTHOR_EMAIL" =~ "jacks.*" ]] 

注:這隻會在Bash的3.0或更高的工作。否則,我認爲您需要使用grepsed外部命令作爲條件檢查的一部分。

另外,我認爲你只需要在提交者的電子郵件不是Jack的情況下更改提交者,反之亦然。因此,請確保您在comitter電子郵件檢查中取出anam作業,並對作者的電子郵件檢查作出類似的修復。

+0

我最終得到了語法錯誤(bash的3.2): 的/ usr /的libexec/git的核/ GIT-濾波器分支:EVAL:線335:鄰近語法錯誤'〜=」 的/ usr /的libexec/git-core/git-filter-branch:eval:line 335:'if [[「$ GIT_COMMITTER_EMAIL」〜=「jonw。*」]]' env filter failed: – 2012-02-09 13:37:37

+0

交換'〜'和'= '修復了語法錯誤。 – 2012-02-09 13:41:50

+0

修復了語法錯誤,謝謝。 – James 2012-02-09 16:52:38