Git filter-branch не переписывает всю историю - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь переписать историю репо, используя:

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 с использованием Git + SVN.

1 Ответ

1 голос
/ 08 февраля 2012

Я не думаю, что ваши условия проверяют, что вы хотите.Не должен:

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

быть

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

Примечание: это будет работать только в Bash 3.0 или выше.В противном случае, я думаю, вам нужно будет использовать внешние команды grep или sed как часть ваших условных проверок.

Кроме того, я думаю, что вы захотите менять коммитер только тогда, когда электронная почта коммиттера неДжека и наоборот для автора.Поэтому убедитесь, что вы удалили свои задания an и am в своей проверке почты комиттера и сделайте исправление, аналогичное проверке электронной почты автора.

...