Для Capistrano 3.0, я использую следующее:
В моих Capfile
:
# Define a new SCM strategy, so we can deploy only a subdirectory of our repo.
module RemoteCacheWithProjectRootStrategy
def test
test! " [ -f #{repo_path}/HEAD ] "
end
def check
test! :git, :'ls-remote', repo_url
end
def clone
git :clone, '--mirror', repo_url, repo_path
end
def update
git :remote, :update
end
def release
git :archive, fetch(:branch), fetch(:project_root), '| tar -x -C', release_path, "--strip=#{fetch(:project_root).count('/')+1}"
end
end
И в моем deploy.rb
:
# Set up a strategy to deploy only a project directory (not the whole repo)
set :git_strategy, RemoteCacheWithProjectRootStrategy
set :project_root, 'relative/path/from/your/repo'
Все важный код в методе стратегии release
, который использует git archive
для архивации только подкаталога репо, затем использует --strip
a rgument до tar
, чтобы извлечь архив на нужном уровне.
UPDATE
Как Капистрано 3.3.3, теперь вы можете использовать переменную :repo_tree
конфигурации, что делает этот ответ устаревшим. Например:
set :repo_url, 'https://example.com/your_repo.git'
set :repo_tree, 'relative/path/from/your/repo' # relative path to project root in repo
См. http://capistranorb.com/documentation/getting-started/configuration.
О, как бы я хотел, я мог бы послать вам несколько пинтов из кузнечного пива. Спасибо!! – Nazar 2011-07-11 19:38:43
Perfect. Только то, что мне было нужно. Благодаря! – Matt 2012-06-14 04:01:48
NB. кто-либо читает, это работает, если вы уже используете remote_cache в качестве своего механизма: deploy_via (который опирается на доступ SCM на сервере). – jrg 2013-05-29 16:34:00