13

最近、いくつかのプラグインをサブモジュールに変えましたが、リポジトリを "git clone" すると、サブモジュール ディレクトリが空になることに気付きました。これは、共同開発者がサブモジュールを初期化して更新することを意味します。

ただし、capistrano を使用してデプロイすると、サブモジュール コードが明らかにデプロイされず、問題が発生します。リリース ブランチに移動し、そこでモジュールを初期化して更新することもできますが、それは明らかに理想的なソリューションではありません。

これを処理する方法について誰か提案がありますか? カピストラーノのタスクと同じくらい簡単ですか?

私は物事の生産面では少し初心者です。

ありがとうございました!

4

3 に答える 3

12

この最近のスレッドによると、カピストラーノはサブモジュールを初期化および更新できるはずです。

set :git_enable_submodules,1

.gitmodulesエントリが最新であれば、config/deploy.rb で十分なはずです。ただし、サブモジュールが確実に含まれるように、Capistrano ( )
にパッチを適用 する必要がある場合があります。lib/capistano/recipes/deploy/scm/git.rb

    def checkout(revision, destination)
      git      = command

      branch   = head

      fail "No branch specified, use for example 'set :branch, \"origin/master\"' in your deploy.rb" unless branch

      if depth = configuration[:git_shallow_clone]
        execute  = "#{git} clone --depth #{depth} #{configuration[:repository]} #{destination} && " 
      else
        execute  = "#{git} clone #{configuration[:repository]} #{destination} && " 
      end

      execute += "cd #{destination} && #{git} checkout -b deploy #{branch}" 

      if submodules = configuration[:git_enable_submodules]
        execute += " && git-submodule init &&" 
        execute += "git-submodule update" 
      end

      execute
    end

ネストされたサブモジュールがある場合は、次が必要です。

gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules

展開構成でそれを要求するだけです:

「capistrano/deepmodules」が必要です

gem は残りのすべてを自動的に処理します。
構成から削除でき:git_enable_submodulesます。宝石はそれに注意を払いません-必要な場合は、サブモジュールを有効にしたいとすでに言っています。

注意すべきもう 1 つの詳細 - 現時点では、gem でサポートされているのはリモート キャッシュ戦略のみです。configこれは、次の行に追加する必要があることを意味します。

set :deploy_via, :remote_cache

リモートキャッシュを有効にしますが、とにかくやりたいことです.サーバー側のキャッシュがない場合、多くのサブモジュールやその他のものを含む大きなコードベースを展開するのは本当に面倒です.

于 2009-06-05T03:55:00.130 に答える
5

このコミットにより、CapistranoはGitサブモジュールと組み込みの--recursiveオプションの両方をサポートします。Gitサブモジュールのサポートを有効にするには、これをdeploy.rbファイルに追加します。

set :git_enable_submodules, true

また、再帰的なGitサブモジュールを使用する場合は、これも追加します。

set :git_submodules_recursive, true

于 2013-01-18T00:38:22.683 に答える
5

set :git_enable_submodules, 1それ自体では、このオプションなしでは機能しませんでした。

set :deploy_via, :remote_cache`

これはどこにも文書化されていないようで、理解するのに少し時間がかかりました。サブモジュールがなくても、とにかくそのオプションがあるのは一般的に良いことです。

于 2011-04-06T05:33:11.950 に答える