Я так понимаю, что эта операция у вас не единовременная, а должна происходить регулярно. То есть repo2 у вас все время должен содержать текущую версию ветки public с коммитами без указания авторства.
Можно при пуше в repo1/public выполнять код, который все новые коммиты перенесет в ветку repo1/public-bot, изменив у них автора и запушит в repo2/public.
Перед этим нужно руками эту ветку (repo1/public-bot) подготовить, то есть чтобы код в ней совпадал с текущим repo1/public и при переносе коммитов не было конфликтов. Тут можно воспользоваться ссылкой, которую дал
vyachin.
Ниже я напишу пример реализации, но он, скорее всего, не будет работать корректно, если в этой ветке есть коммиты слияния или если она будет ребэйзиться. Так что, его надо еще допилить.
Реализация
В репозитории repo1 вешаете хук post-receive.
Документация по хукамЯ не спец по bash, так что наверняка можно написать получше, вынести что-то в функции и т.п.#!bash
while read oldrev newrev refname
do
# выполняем код только при обновлении ветки public
if [ $refname = refs/heads/public]
then
git checkout public-bot
# получаем список новых коммитов
commits=$(git log --oneline --reverse test..master --format="%h")
for rev in $commits
do
git cherry-pick $rev
git commit --amend --no-edit --author="bot <bot@e.mail>"
done
fi
done