Git filter-branch不会重写所有历史记录

时间:2012-02-08 13:55:02

标签: git git-svn git-filter-branch

我正在尝试使用以下方式重新编写回购历史:

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="jacks@teamddm.com"
            an="Jack Slingerland"
            am="jacks@teamddm.com"

        fi

        if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]]
        then
            cn="Jack Slingerland"
            cm="jacks@teamddm.com"
            an="Jack Slingerland"
            am="jacks@teamddm.com"
        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 个答案:

答案 0 :(得分:1)

我不认为你的条件正在检查你想要什么。不应:

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

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

注意:这仅适用于Bash 3.0或更高版本。否则,我认为您需要使用grepsed外部命令作为条件检查的一部分。

另外,我认为你只想在提交者的电子邮件不是杰克的时候更改提交者,反之亦然。因此,请务必在您的comitter电子邮件检查中取出anam作业,并对作者电子邮件检查进行类似的修复。