当前位置:  开发笔记 > 开发工具 > 正文

使用Git SVN追溯纠正作者?

如何解决《使用GitSVN追溯纠正作者?》经验,为你挑选了2个好方法。

我有一个我已经从SVN克隆的存储库.我一直在用它的Git形式在这个存储库中做一些工作,我不想再通过克隆来丢失这个结构.但是,当我最初克隆存储库时,我无法正确指定svn.authors属性(或语义相似的选项).有没有什么办法可以指定SVN作者映射,因为存储库完全是Git-ified?最好,我想纠正所有旧提交作者代表Git作者而不是原始SVN用户名.



1> Dustin..:

首先看看你要清理的东西:

git shortlog -s

对于这些名称中的每一个,在脚本中创建一个类似于此的条目(假设您希望所有作者和提交者都相同):

#!/bin/sh

git filter-branch --env-filter '

n=$GIT_AUTHOR_NAME
m=$GIT_AUTHOR_EMAIL

case ${GIT_AUTHOR_NAME} in
        user1) n="User One" ; m="user1@example.com" ;;
        "User Two") n="User Two" ; m="user2@example.com" ;;
esac

export GIT_AUTHOR_NAME="$n"
export GIT_AUTHOR_EMAIL="$m"
export GIT_COMMITTER_NAME="$n"
export GIT_COMMITTER_EMAIL="$m"
'

这基本上是我最近用于大量重写的脚本,就像你描述的那样(除了我有大量的作者).

编辑使用π指出我的脚本中的引用问题.谢谢!


这个脚本工作正常.但是,在我应用它之后,调用"git svn rebase"会导致错误消息:"无法确定工作树历史记录中的上游SVN信息".

2> Jörg W Mitta..:

git filter-branch 可以用来重写大块的历史.

在这种情况下,你可能会做(完全未经测试):

git filter-branch --env-filter '
    GIT_AUTHOR_NAME=`echo "${GIT_AUTHOR_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"`
    GIT_COMMITTER_NAME=`echo "${GIT_COMMITTER_NAME}" | sed -e "s/svnname1/Right Name/; s/svnname2/Correct Name/"`
    GIT_AUTHOR_EMAIL=`echo "${GIT_AUTHOR_EMAIL}" | sed -e "s/svnname1/m@i.l/; s/svnname2/correct.name@e.mail/"`
    GIT_COMMITTER_EMAIL=`echo "${GIT_COMMITTER_EMAIL}" | sed -e "s/svnname1/m@i.l/; s/svnname2/correct.name@e.mail/"`
'

与往常一样,以下情况适用:为了重写历史,您需要一个阴谋.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有