git репозиторий на производственном сервере: что нужно сделать после настройки голого репозитория?

Я создал голый репозиторий 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 должна быть "прикреплена" к какой-то фиксации, и это будет рассматриваемая фиксация.


person Steven Lu    schedule 02.04.2013    source источник
comment
Просто вернемся на несколько шагов назад: так почему у вас голый репозиторий на рабочем сервере? Почему бы вам просто не взять код из репозитория Bitbucket и не развернуть его?   -  person eis    schedule 02.04.2013
comment
@eis Потому что я следовал этим направления.   -  person Steven Lu    schedule 02.04.2013


Ответы (1)


Хук post-receive — хорошее решение.

Другой альтернативой является установка второго репозитория, не являющегося голым, и переход в этот репозиторий, чтобы вытащить из первого репозитория. Я объясняю это в разделе «Является ли опция --bare равной core.bare конфигурации в Git?».

Как eis комментарии, оба решения хороши, если вы хотите отправить данные напрямую в репозиторий git сервера EC2. .
Также может работать прямое извлечение репозитория BitBucket из сеанса git в EC2.

person VonC    schedule 02.04.2013
comment
Если я инициализировал свое репо на сервере как не голое, то оно в основном получит рабочее дерево, как обычное репо, и в то же время позволит мне нажать на него? Нужно ли мне делать что-то конкретное, чтобы заставить его принудительно обновить свое рабочее дерево? - person Steven Lu; 02.04.2013
comment
О, я вижу, как у меня это получается. В моем post-receive на голом репо сценарий оболочки просто перейдет во второе обычное репо на сервере, который будет извлекать, и на самом деле он может извлекать либо из битбакета, либо из локального голого репо. Теперь, чтобы узнать, как указать локальный репозиторий... - person Steven Lu; 02.04.2013
comment
@StevenLu да, лучше избегать перехода к не голому репо, поэтому лучше использовать второе (не голое) репо. - person VonC; 02.04.2013