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
Кроме того, до сих пор я безуспешно пытался выполнить следующий рабочий процесс:
- создайте
--baregit repo на пульте дистанционного управления (чтобы я мог получить к нему доступ отовсюду) - клонируйте это удаленное РЕПО в локальный каталог и используйте приложение Git Tower для управления им
- работайте локально в
master (HEAD) -
scp -rкопирования--bareGit репозитория с удаленного сервера на мой домен удаленного живут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`.