Git → Перезапись истории, замена автора
Иногда возникает необходимость перезаписать в истории коммитов автора этих саммых коммитов. На такой случай как раз и добавлю эту заметку, потому что с тех пор, как использую git, такая потребность случалась уже трижды! 😏
Далее под кат...
Git → Git-хуки
Решил на днях починить автотесты в админке этого блога и в процессе их восстановления начал обнаруживать и баги, которые появились с тех пор, как тесты были заброшены, включая и недавние изменения. Не то, что бы и баги, здесь не так много функциональности, чтобы поломка прошла незамеченной, скорее некорректное поведение системы, вроде неправильного часового пояса в контейнере приложения и т.п.
Чтобы обойтись без внешних CI-сервисов, решил запускать тесты локально перед каждый пушем, автоматически, для чего в системе контроля версий Git предусмотрены хуки, ниже как раз приведён пример подобного pre-push хука (в папке .git/hooks их на разные случаи жизни):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env bash
echo -e "Start pre-push hook\n"
docker compose run --rm --remove-orphans -T rhinoceros bash -c "bin/phpspec run"
retVal=$?
if [ $retVal -ne 0 ]; then
echo -e "\e[31m phpspec error\e[0m\n"
exit 1
else
echo -e "\e[32m phpspec OK\e[0m\n"
fi
exit 0
|
Git → Синхронизация форкнутого репозитория с оригинальным
Очередная заметка для самого себя, чтобы не искать. Вроде бы всё до ужаса элементарно, но не запомню, пока не напишу об этом :)
Первым делом добавляем remote-репозиторий, ссылающийся на оригинальный, назовём его, к примеру upstream1. Список удалённых репозиториев можно посмотреть командой git remote -v, чтобы убедиться, что всё верно.
После вытягиваем все изменения, произошедшие в репозитории upstream2 и сливаем их со своим репозиторием3.
1 2 3 4 5 6 7 8 9 10 11 12 | # шаг 1
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# шаг 2
git fetch upstream
# шаг 3
git checkout master
git merge upstream/master
|
Git → Текущая ветка в командной строке
Объяснял и показывал сабж уже четырём человекам, по меньшей мере, поэтому сделаю запись и буду скидывать ссылку. Хотя таких записей в интернете уже пруд пруди на всех языках :)
Git → git diff и FreeBSD
В общеобразовательных целях решил поиграться с FreeBSD и, естественно, установил туда Git. Настроил, как положено, вывод цветов в консоль, т.е.:
1 | git config --global color.ui true
|
И, вроде бы, всё хорошо, однако при использовании команды git diff вывалилась такая печалька на экран.
Решение нагуглилось секунд за 30. Нужно всего лишь установить в конфигурации Git-а правильный пейджер.
1 | git config --global core.pager 'less -R'
|
Вот, собственно, и всё. Можно было и не писать этого всего, но должны же быть тут какие-то заметки :)