Я написал сообщение в блоге о настройке, которую я использую для развертывания своего веб-сайта на промежуточном сервере и на действующем сервере.Вы могли бы сделать что-то подобное.Ключ заключается в том, чтобы настроить, какие ветви вы собираетесь выдвигать в файле .git/config
вашего локального репозитория, что-то вроде этого:
[remote "alternate"]
url = ssh://server/home/username/projects/myproject-alternate.git
fetch = +refs/heads/master:refs/remotes/alternate/master
pushurl = ssh://server/home/username/projects/myproject-alternate.git
push = refs/heads/branchname:refs/heads/master
[remote "production"]
url = ssh://server/home/username/projects/myproject.git
fetch = +refs/heads/master:refs/remotes/production/master
pushurl = ssh://server/home/username/projects/myproject.git
push = refs/heads/master:refs/heads/master
Это настроит его так, чтобы при вводе
git push alternate
он будет автоматически перемещать локальную ветвь branchname
в удаленную ветвь master
в альтернативном репозитории.
Однако, поскольку ваши альтернативные и производственные рабочие деревья находятся на одном компьютере,вы, вероятно, можете обойтись, создав только один репозиторий и просто проверив его в двух разных местах.Чтобы сделать это, проигнорируйте предыдущий абзац и вместо этого поместите что-то вроде этого в свой хук после получения:
#!/bin/bash
checkout_alt=
checkout_prod=
while read oldrev newrev refname; do
case "$refname" in
( "refs/heads/branchname" )
export checkout_alt=1 ;;
( "refs/heads/master" )
export checkout_prod=1 ;;
esac
done
test -n "$checkout_alt" && GIT_WORK_TREE=/home/diazona/tmp/gittest/alt/ git checkout -f branchname
test -n "$checkout_prod" && GIT_WORK_TREE=/home/diazona/tmp/gittest/prod/ git checkout -f master
(очевидно, у вас нет , чтобы использовать if
заявление).Если вы сделаете это, я предлагаю сделать хранилище пустым, чтобы в нем не хранилась собственная рабочая копия, просто для простоты.Таким образом, вам нужен только один пульт, и всякий раз, когда вы нажимаете ветку master
, она обновляет производственное рабочее дерево, а всякий раз, когда вы нажимаете ветку branchname
, она обновляет альтернативное рабочее дерево.
Отказ от ответственности: я на самом деле не проверял это, поэтому сначала попробуйте в тестовой папке.Если я найду какие-либо ошибки, я вернусь и отредактирую.