2010-12-09 3 views
4

Я новичок в Git, и я не понимаю, как я могу добиться следующего. Есть 2 сервера:Git: localhost> дистанционное развитие> удаленное производство

  1. Localhost
  2. Linode.com VPS

В принципе, я хочу:

  1. Написать новый код на моем локальном хосте.
  2. Вставьте новый код в разработке версии на VPS, где он может быть испытания (на dev.domain.com или что-то вроде что.)
  3. Если новый код работает, нажать к производственная версия на той же VPS. Должно быть доступно по адресу domain.com.

Каков правильный путь к достижению того, что я хочу?

+0

Как насчет * вытягивания * кода на производственный сервер из репо? – cdhowie 2010-12-09 14:24:16

ответ

5

Существует несколько способов сделать это. Если у вас есть возможность запускать ssh-сервер на VPS, это довольно просто.

В вашем репозитории git на localhost вы настроите два git-пульта. Они будут иметь один и тот же хост, но разные пути (один пульт для пути dev и один для prod-пути).

git remote add prod ssh://[[email protected]]host.xz[:port]/path/to/prod/repo.git/ 
git remote add dev ssh://[[email protected]]host.xz[:port]/path/to/dev/repo.git/ 

И если вы устанавливаете доступ к открытым/закрытым ключам ssh, вам не нужно вводить пароль каждый раз.

После того, как вы совершили необходимые изменения в свой репозиторий на локальном хосте, то вы будете делать это, чтобы подтолкнуть их к Dev среде:

git push dev # remote named dev points to dev repository 

После того как они будут проверены, то вы можете подтолкнуть их к производству (от ваш репо на локальном хосте):

git push prod # remote named prod points to prod repository 

Если вы собираетесь изменить GIT репозиторий на локальном хосте между нажатием Девы и продом (кроме исправления вы хотите приложенным), то существует много способов решения этих проблем:

  • ветка или тег перед тем, как нажимать на dev и нажимать это вместо вашей основной ветви (рекомендуется в любом случае по другим причинам).
  • Сделайте копию репо на локальном хосте и нажмите это.
  • ветка перед внесением изменений и нажмите ветку вместо основной ветви.
  • Войти в VPS и просто нажать (или тянуть) от разработчика к прод репо

Это не покрывает половину ваших вариантов, но достаточно, может быть, чтобы думать.

+0

Это был мой план, пока я не обнаружил, что при нажатии на не-голые репозитории не рекомендуется. Учитывая тот факт, что я буду работать один на этом сайте, я думаю, это не проблема? Я нашел два способа вставить в не-голый репозиторий: http://stackoverflow.com/questions/1764380/push-to-non-bare-repository/1764793#1764793 Думаю, я мог бы использовать второй вариант? – 2010-12-09 15:11:22

+0

Если вы не собираетесь редактировать какие-либо изменения в репозиториях dev и prod, вы должны быть уверены, что после нажатия нажмите «git reset - hard HEAD». Вы также можете рассмотреть возможность выполнения команды `rsync -avz -del -exclude = .git ...` (опция -del удаляет файлы у цели, которая больше не находится в исходном коде). – kanaka 2010-12-09 19:44:43

+1

Да, я думаю, что я не буду там редактировать. После еще одной мысли я придумал идею использования 4 репозиториев: локального, удаленного развития, удаленного производства и удаленного доступа. Я могу нажать из локального репозитория на пульт дистанционного управления, а затем я могу вытащить его из репозитория разработки/производства. Как вы думаете? – 2010-12-09 21:05:11

0

Предложение: (что не совсем то, что вы хотите)

1) Используйте «нормальный GIT способ работы» .. есть локальный и удаленный репозиторий.

2) Вытащите локальный код хранилища на VPS для тестирования

3) Вытащите код удаленного хранилища на VPS для производства

0

PhpStorm может автоматически синхронизировать изменения за SFTP, даже при изменении ветви локально ,

В системах Windows это лучшее решение, которое я нашел до сих пор. В системах unix/mac вы можете использовать rsync в сочетании с утилитой, которая отслеживает изменения файловой системы.