Git筛选器分支未重写所有历史记录
我正试图使用以下方法重新编写回购历史记录:Git筛选器分支未重写所有历史记录,git,git-svn,git-filter-branch,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
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
该命令运行正常,并按指定重写作者。问题是它似乎遗漏了历史上的一些条目。我认为当一个分支中所做的更改被合并时,这种情况就会发生,但我不确定
注意:这是一个SVN存储库,它是使用Git+SVN导入Git的。我不认为您的条件检查了您想要的内容。不应该:
if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]]
是
注意:这只适用于Bash3.0或更高版本。否则,我认为您需要使用grep
或sed
外部命令作为条件检查的一部分
此外,我认为你只会想在提交人的电子邮件不是杰克的时才更改提交人,反之亦然。因此,请确保在您的comitter电子邮件检查中取出您的
和am
作业,并对您的作者电子邮件检查进行类似的修复。我不认为您的条件正在检查您想要的内容。不应该:
if [[ "$GIT_AUTHOR_EMAIL" = jacks* ]]
是
注意:这只适用于Bash3.0或更高版本。否则,我认为您需要使用grep
或sed
外部命令作为条件检查的一部分
此外,我认为你只会想在提交人的电子邮件不是杰克的时才更改提交人,反之亦然。因此,请确保在您的comitter电子邮件检查中取出您的an
和am
作业,并对您的作者电子邮件检查进行类似的修复。我最终会遇到语法错误(bash 3.2):/usr/libexec/git-core/git-filter-branch:eval:line 335:near~='/usr/libexec/git-core/git-filter-branch:eval:line 335:
if[“$git\u-COMMITTER\u-EMAIL”~=“jonw.*]”环境过滤器失败:交换“~”和“=”的顺序修复了语法错误。@Jackslingrland更改有帮助吗?我最终得到了语法错误(bash 3.2):/usr/libexec/git-core/git-filter-branch:eval:line 335:~=”/usr/libexec/git-core/git-filter-branch:eval:line 335:
如果[“$git\u提交者电子邮件”~=“jonw.*]”环境过滤器失败:交换“~”和“=”的顺序修复了语法错误。@jacklingerland更改是否有帮助?