Я использую rsync, чтобы синхронизировать содержимое моей локальной машины с сервером, и если вы просто развертываете на один сервер, то это довольно просто (и Capistrano - избыток.). Я поставил следующие псевдонимы в ~/.bash_profile
:
alias eget='rsync -avie ssh [email protected]:sites/example.com/www/ ~/Projects/example/example.com/www/ --exclude .DS_Store --exclude ".git*" --delete-after'
alias edep='rsync -avuie ssh ~/Projects/example/example.com/www/ [email protected]:sites/example.com/www/ --exclude .DS_Store --exclude ".git*" --delay-updates --delete-after'
Тогда из мерзавца репо на моей локальной машине. Я:
git commit -am 'commit some changes'
git pull --rebase # pull any new changes from remote (--rebase prevents an unnecessary merge commit.)
eget -n # confirm which files I've changed
Если он выглядит подозрительным, я мог бы сделать eget
без -n, а затем просто сделать git diff -w
. Тогда я мог бы сделать git checkout -- path/to/file
для файлов, для которых я хочу сохранить свои изменения. Затем я фиксирую изменения, которые были на сервере, которых я еще не получил. Это произойдет только в том случае, если файлы на сервере меняются иным образом, чем от развертываний. В противном случае вы знаете, что ваша локальная версия всегда более актуальна, чем файлы на сервере, и поэтому вам не нужно беспокоиться о перезаписи вещей на сервере, которые у вас еще нет на вашем локальном компьютере. Продолжить ...
edep -n # just see what files will be deployed/updated/etc.
edep # looks good. Deploy for real.
Готово!
За дополнительной информацией обращайтесь к rsync(1) Mac OS X Manual Page.
Другой вариант - использовать Git post-receive hook. Но для этого вам нужно будет установить Git на сервер. Кроме того, я рекомендую поместить .git
в каталог за пределами вашего общедоступного www
каталога для обеспечения безопасности & причинам чистоты. Вы можете сделать это с помощью опции конфигурации Git core.worktree
. Например, от ~/git/example.com.git
, do git init --bare; git config core.worktree ~/sites/example.com/
. Это делает ~/git/example.com.git
, как .git
, для ~/sites/example.com/
.
проверить http://stackoverflow.com/questions/279169/deploy-php-using-git – philfreo
или Capistrano http://help.github.com/capistrano/ – philfreo