Я создал голый репозиторий git на своем экземпляре EC2 и отправил в него ветку с моей машины разработки. Теперь я могу запустить git log
на сервере, и он выглядит обновленным со всем.
У машины разработчика теперь есть два пульта, один «источник» — это репозиторий Bitbucket.org, где живет код, а второй «ec2» — это пульт, на который я бы нажимал, чтобы развернуть код. Похоже, что всякий раз, когда я нажимаю «ec2», он в основном синхронизирует репо с тем, что я захватил с Bitbucket. Что хорошо, хотя в глубине души мне интересно, что мне нужно сделать по-другому, чтобы построить другую историю без промежуточного содержания. (не важный.)
Однако на сервере репо является голым репо и не имеет рабочего дерева.
Как правильно заставить сервер автоматически развертывать веб-приложение?
Я хотел бы, чтобы кто-нибудь помог мне сравнить и сопоставить эти два метода:
... inside the bare repo on the server ...
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/home/ec2-user/www/webserver-works-off-this-dir
export GIT_WORK_TREE
git checkout -f
В качестве альтернативы я думаю, что может иметь смысл создать отдельный репозиторий git, т.е.
... also on the server ...
$ cd /home/ec2-user/www/
$ git clone # ??? How do I clone from localhost bare repo?
... presumably set the post-receive hook in the bare-repo to cd to *this* dir and run git checkout or pull or something...
О, и что делает git checkout -f
? Принудительно перезаписать последнюю фиксацию в хронологическом порядке? Я думаю, что есть что-то неявное, в чем я не уверен. Я предполагаю, что операция push
должна быть "прикреплена" к какой-то фиксации, и это будет рассматриваемая фиксация.