Push git ветви непосредственно в каталог live server, так что файлы видны в реальном времени
Как я могу настроить удаленные каталоги в Git, где я могу локально толкать ветку этапа к удаленному и видеть текущие изменения на промежуточном сервере, например stage.example.com?
Идея, которую я имею (часть того, почему я удаляюсь от SVN), состоит в том, что я могу поддерживать (локально) 3 различных" главных " ветви следующим образом:
- master - используется для локального развития, рабочий реж
- этап - должен быть синхронизирован с каталогом промежуточного сервера (удаленный)
- live - это должен быть общедоступный веб-сайт (удаленный)
svn update
(в моем текущем рабочем процессе svn мне нужно делать это все время...) или, конечно, в моем рабочем процессе Git запускать git pull
на удаленном компьютере.
Как настроить удаленные каталоги, чтобы я мог локально нажмите мою ветвь stage
на staging remote server
и посмотрите изменения на (например) stage.example.com
прямо сейчас?
Затем, как только stage
будет все в порядке и протестировано, я просто локально смогу push
на live
удаленный внести эти изменения, которые я протестировал на stage
на веб-сайте live.
Можно ли это вообще сделать, или я получаю здесь сумасшедшие идеи, которые просто не предназначены для Git?
В случае, если это важно, вот несколько статистических данных о моем местном и удаленные серверы:
remote server: Dreamhost (shared account) remote GIT version: 1.7.1.1 remote GIT client: shell local computer: Mac Pro (Snow Leopard 10.6.6) local GIT version: 1.7.2.3 local GIT client: Tower.app // git-tower.com
Кроме того, до сих пор я безуспешно пытался выполнить следующий рабочий процесс:
- создайте
--bare
git repo на пульте дистанционного управления (чтобы я мог получить к нему доступ отовсюду) - клонируйте это удаленное РЕПО в локальный каталог и используйте приложение Git Tower для управления им
- работайте локально в
master (HEAD)
-
scp -r
копирования--bare
Git репозитория с удаленного сервера на мой домен удаленного живутstage.example.com
- добавьте удаленную рабочую копию в локальную, а затем попробуйте нажать на
origin/stage
Исходя из фона SVN, я новичок в Git, но смотрел много учебников (Peepcode & ThinkVitamin), но все еще не могу понять, как это настроить.
1 ответ:
Единственное понятие, которое можно реализовать с помощью DVCS ("распределенных" VCS, таких как Git или Mercurial), заключается в том, что он добавляет понятие публикации (push / pull) к понятию ветвления.
В ЦВК ("централизованной" системы контроля версий, например, SVN) имеет ветвление (и один центральный РЕПО для передачи на сервер).В вашем случае staging или live-это шаги публикации, то есть различные РЕПО Git, готовые к получению изменений, которые вы хотите видеть в staging или в live среде.
Что означало бы:
- 2 ветви для отслеживания того, что относится к промежуточной ("
staging
" ветви) или живой ("live
" ветви)- 1 удаленное голое РЕПО (для того, чтобы иметь возможность толкать к нему , толкая либо
staging
, либоlive
ветвь- 1 крюк после обновления для голого РЕПО для проверки и обновления рабочего дерева (представляющего ваши фактические "промежуточные" или "живые" файлы)
- 1 локальное РЕПО, где вы добавляете голое РЕПО как удаленное, и где вы можете нажать на постановку или жить.
Вы также можете клонировать голое РЕПО на любой другой локальный компьютер, на котором вам нужно работать.Разница между
post-receive
иpost-update
крюком состоит в том, чтоpost-update
выполняется один раз для каждой модифицированной ветви:
Смотрите " git-хук для обновления различных веб-папок на основе ветки, перемещенной на удаленный сервер ".На начальном толчке, сделайте "
git push --all origin
" и все ветви будут созданы на удаленном голом РЕПО.Идея заключается в том, что на стороне сервера не должно быть никакого вытягивания: только
git --work-tree=/path/to/your/live/files/ checkout live
илиgit --work-tree=/path/to/your/staging/files/ checkout staging
, в зависимости от параметров крючка после обновления: вы только извлекаете файлы голого РЕПО в эти "папки" на сервере.Если вы делаете сценарий ruby для вашего крючка, убедитесь, что:
- используйте правый shebang:
#!/usr/bin/env ruby
,- окружить команду git с помощью backtick должно быть достаточно:
`git ...`
, как в этом сценарии ,- использование
ENV['HOME']
для указания homedir текущего пользователя в указанном скрипте, если вы хотите, чтобы команды, такие как`cd ~/stagedomain.com`
или`--work-tree=~/stagedomain.com`
работали (с`~`
, установленным на правильный путь),- Если вы выбрали
git pull
, снимитеGIT_DIR
на той же строке, что и другие команды , как в другом вопросе:`cd ~/stage.mydomain.com && unset GIT_DIR && git pull core stage`
.