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

Предупреждение: Деление на ноль

Предупреждающее сообщение «Подразделение на ноль» является одним из наиболее часто задаваемых вопросов среди новых разработчиков PHP. Эта ошибка не вызовет исключения, поэтому некоторые разработчики иногда будут подавлять предупреждение, добавляя оператор подавления ошибок @ перед выражением. Например:

$value = @(2 / 0);

Но, как и при любом предупреждении, наилучшим подходом было бы отслеживать причину предупреждения и разрешать его. Причина предупреждения будет происходить из любого экземпляра, где вы пытаетесь разделить на 0, переменную, равную 0, или переменную, которая не была назначена (поскольку NULL == 0), потому что результат будет «неопределенным».

Чтобы исправить это предупреждение, вы должны переписать свое выражение, чтобы проверить, что значение не равно 0, если оно есть, сделать что-то еще. Если значение равно нулю, вы не должны делиться или изменять значение на 1, а затем делить так, что деление приводит к эквиваленту того, что он разделен только дополнительной переменной.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Вопросы, относящиеся:

52
задан Lii 9 April 2019 в 22:45
поделиться

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="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"
'

Это - в основном сценарий, который я использовал для большая перезапись недавно, который был очень, как Вы описали (кроме, у меня были большие количества авторов).

редактирование Использование ПЂ указало на проблему заключения в кавычки в моем сценарии. Спасибо!

57
ответ дан Dustin 7 November 2019 в 09:30
поделиться

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/"`
'

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

11
ответ дан Jörg W Mittag 7 November 2019 в 09:30
поделиться

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

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

3
ответ дан Greg Hewgill 7 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: