我正在尝试使用以下方式重新编写回购历史:
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存储库。
答案 0 :(得分:1)
我不认为你的条件正在检查你想要什么。不应:
if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]]
是
if [[ "$GIT_AUTHOR_EMAIL" =~ "jacks.*" ]]
注意:这仅适用于Bash 3.0或更高版本。否则,我认为您需要使用grep
或sed
外部命令作为条件检查的一部分。
另外,我认为你只想在提交者的电子邮件不是杰克的时候更改提交者,反之亦然。因此,请务必在您的comitter电子邮件检查中取出an
和am
作业,并对作者电子邮件检查进行类似的修复。