2

capistrano v2 では、オプションを使用してデプロイにサブモジュールを含めることができます。

set :git_enable_submodules, 1

v3 では、これは機能していないようです。このオプションはまだサポートされていますか、それとも同じ目標を達成するための新しい方法はありますか?

4

4 に答える 4

3

capistrano 3.1.x 以降では、独自の SCM 戦略を実装できます。git サブモジュールに役立つ利用可能な gem があります。https ://github.com/i-ekho/capistrano-git-submodule-strategy を参照してください。

注:repo既定の git 戦略を既に試している場合は、フォルダーに問題がある可能性があります。サーバーの deploy ディレクトリに移動して削除し、 cap deploy を再度実行して修正します。

于 2014-07-11T05:11:50.787 に答える
2

新しいプルリクエスト「828」は、それを再び実装しようとしています: https://github.com/capistrano/capistrano/pull/828

@coffeeaddict で説明されているように、このコミットは、capistrano 自体にバンドルされるまで、ローカルにデプロイする必要があるコードのスクラップです。コードを使用するには Capistrano >= 3.1.0 が必要であることに注意してください。

上記の戦略のいくつかの問題を修正することを提案する別のGistもあります。

于 2014-01-22T18:15:15.287 に答える
2

capistrano の git タスクにフックするのは非常に難しいことがわかりました (ステージが設定されるまで存在しないため)。さらに、git アーカイブはサブモジュールのサポートをまったく提供しないため、その部分を完全に置き換える必要があります。

明らかな理由から、コピーと貼り付けもオプションではありません。

そこで、git scm を置き換えることができるこの単純な gem を作成しました。サブモジュールでレポを複製することにより、capistrano 2 と同様のアプローチを使用します。それは非常にシンプルで、私たちの目標には十分です。サブモジュールのさまざまな使用法はそれほど多くないと思います (人々が複雑さを避けようとする場合)。

https://github.com/juanibiapina/capistrano-scm-gitsubmodules

それもあなたに役立つかどうか教えてください。

アップデート:

このモジュールは capistrano 3.1.0 で廃止されました。代わりにこれを試してください: https://gist.github.com/stevenscg/8176735

于 2013-10-24T18:01:48.260 に答える
0

カピストラーノのソース コードhttps://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/git.rake#L34およびhttps://github.com/capistrano/capistrano/blobでわかるように/master/lib/capistrano/tasks/git.rake#L56を使用git archiveして、コードをリリース ディレクトリにチェックアウトします。

コードはここに再現されています:

desc 'Clone the repo to the cache'
task clone: :'git:wrapper' do
  on roles :all do
    if test " [ -f #{repo_path}/HEAD ] "
      info t(:mirror_exists, at: repo_path)
    else
      within deploy_path do
        with git_environmental_variables do
          execute :git, :clone, '--mirror', repo_url, repo_path
        end
      end
    end
  end
end
desc 'Update the repo mirror to reflect the origin state'
task update: :'git:clone' do
  on roles :all do
    within repo_path do
      execute :git, :remote, :update
    end
  end
end
desc 'Copy repo to releases'
task create_release: :'git:update' do
  on roles :all do
    with git_environmental_variables do
    within repo_path do
      execute :mkdir, '-p', release_path
      execute :git, :archive, fetch(:branch), '| tar -x -C', release_path
    end
  end
 end

そのことから、サブモジュールがサポートされていないことを確認できます。サブモジュールを複製または初期化するコマンドは発行されず、git-archive はそれらを無視します。

サブモジュールを組み込むために必要なフックが既に存在する場合は、「すぐに使える」サブモジュールを含めないという決定が下されました (ソース: Capistrano の作成者はこちら)。自分に合った方法でサブモジュールをチェックアウト/更新するために必要なもの。Capistrano v2 サブモジュールのサポートは、多くの場合、人々に予期しない結果をもたらしました。

それを念頭に置いて。にフックしてupdate、更新が完了した後にサブモジュールを初期化および更新し、git-archive必要なことを行う拡張方法を調べることは価値があるかもしれません。

于 2013-10-16T13:09:56.363 に答える