Задним числом исправьте авторов с Git SVN?



У меня есть репозиторий, который у меня есть уже клонирован из SVN. Я делал некоторую работу в этом репозитории в его Git-форме, и мне бы не хотелось снова потерять эту структуру путем клонирования. Однако, когда я изначально клонировал репозиторий, мне не удалось правильно указать svn.authors свойство (или семантически похожая опция). Есть ли способ указать сопоставления SVN author теперь, когда репозиторий полностью git-ified? Желательно, я хотел бы исправить все старые зафиксируйте авторов для представления автора Git, а не необработанного имени пользователя SVN.

700   3  

3 ответов:

начните с того, что вы должны очистить:

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="[email protected]" ;;
        "User Two") n="User Two" ; m="[email protected]" ;;
esac

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

это в основном сценарий, который я использовал для большие переписать недавно это было очень похоже на то, что вы описали (за исключением того, что у меня было большое количество авторов).

edit используйте π указал на проблему цитирования в моем скрипт. Спасибо!

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/[email protected]/; s/svnname2/[email protected]/"`
    GIT_COMMITTER_EMAIL=`echo "${GIT_COMMITTER_EMAIL}" | sed -e "s/svnname1/[email protected]/; s/svnname2/[email protected]/"`
'

Как всегда, применяется следующее: Для того, чтобы переписать историю, вам нужен заговор.

вы, вероятно, хотите посмотреть в git-filter-branch, в частности . Эта команда представляет собой мощную бензопилу, которая может переписать всю историю репозитория, изменив все, что вы хотите изменить.

обратите внимание, что при этом вы должны извлекать новые клоны из обновленного репозитория, так как хэши SHA1 каждого коммита могут измениться.

Comments

    Ничего не найдено.