2010-08-10 3 views
1

Мы переезжаем из HG в Git. Наша настройка такова:Как я могу это сделать с Git

Dev локально, зафиксировать и направить код на наш сервер dev и протестировать, затем мы возьмем код на dev и поместим его на prod. Так: локальный -> DEV сервер/постановка -> производство сервер

Как мы делаем это с HG является следующее:

От местного до devserver

hg commit -m 'stuff' 
hg push ssh://[email protected]//var/django/projects/project_name 
ssh -l username devserver 'hg update -R /var/django/projects/project_name 

От devserver к производству Войти на сервер

mkdir /var/django/projects/project_name ; cd var/django/projects/project_name ; hg init 
hg pull ssh://[email protected]//var/django/projects/project_name 
/etc/init.d/apache reload 

Я пытаюсь г выложите эту же вещь с Git, но не повезло, чтобы заставить их работать. До сих пор, что я пытался сделать, это:

Местный

git init 
git add . 
git commit 
git remote add origin ssh://[email protected]/var/django/projects/project_name 
git push origin master 

Dev Сервер

git init 

(исходный код здесь живет для тестирования)

Производство сервер

git init 
git remote add origin ssh://[email protected]/var/django/projects/project_name 
git pull origin master 

Проблема мерзавец, как я делаю это не обновляет сервер производства с последними изменениями совершенных

Любые идеи, как я могу сделать этот тип рабочего процесса?

С уважением,

Джефф

ответ

0

Похоже, что ваш сервер DEV является «не голое» Git репозиторий (то есть он имеет рабочую копию). См. Этот вопрос по связанному сценарию: Git push only for bare repositories?

Когда вы входите в сервер dev, возможно, вы получили предупреждение о том, что вхождение в не-голый репозиторий является небезопасным и, вероятно, не тем, что вы хотите. То, что я сделал бы, это создать новый открытый репозиторий (используя git init --bare) для разработки. Неважно, где находится этот репозиторий (пока он доступен со всех ваших серверов). Затем, после нажатия вашего кода в репозиторий dev, войдите в систему самого dev и вытащите из репозитория bare-dev, чтобы обновить локальные файлы до последнего кода.

Если вы хотите обновить производственный сервер до определенной версии кода, войдите в систему на производственный сервер и вытащите из репозитория для обновления производственных файлов. Вы даже можете проверить определенную версию (с помощью хэша SHA1 или тега или что-то еще), чтобы убедиться, что вы не получили ни одного , другой обязывает кого-то еще в то же время вставить в репозиторий. (Это также позволит вам вернуться в любую предыдущую версию в любой момент, если вам нужно.)

Вышеупомянутый рабочий процесс также легко поддерживает несколько серверов разработки.

+0

Привет, Грег, спасибо за ответ, я попытался сделать это, моя проблема в том, когда я вхожу в сервер dev, чтобы выполнить pull. Я получаю эту ошибку: fatal:/usr/lib/git-core/git- тянуть нельзя использовать без рабочего дерева. – JeffTaggary

+0

@JeffTaggary: Чтобы уточнить, вы могли бы создать один пустой репозиторий где-нибудь (он может быть на dev-сервере, но, безусловно, не обязательно), где вы * нажимаете * свои изменения. Затем, используя 'git clone' на сервере dev, создайте клон с полной рабочей копией, которую вы фактически используете для тестирования разработки. Из этого клона вы затем «git pull» из основного репозитория (голого). Вы бы сделали что-то подобное на производственном сервере, например, вытащив определенный тег из главного репозитория. –

Смежные вопросы