2011-11-07 18 views
2

私はこれに関してかなりの検索をしましたが、結果のどれも頭に釘を打っていませんでした。私は、エラーを取得するサブモジュール内にGitサブモジュールをネストする方法は?

$ mkdir blah 
$ git init 
$ git submodule add -b 7.x http://git.drupal.org/project/drupal.git drupal 
$ git submodule add -b 7.x-1.x http://git.drupal.org/project/devel.git drupal/sites/all/modules/contrib/devel 

The following path is ignored by one of your .gitignore files: 
drupal/sites/all/modules/contrib/devel 
Use -f if you really want to add it. 

だから私は、-fパラメータを追加...

$ git submodule add -f -b 7.x-1.x http://git.drupal.org/project/devel.git drupal/sites/all/modules/contrib/devel 

を...しかし、適切な場所へのクローニングの後、私はこのエラーが発生する:

fatal: Path 'drupal/sites/all/modules/contrib/devel' is in submodule 'drupal' 
Failed to add submodule 'drupal/sites/all/modules/contrib/devel' 

私がすべてのサブモジュールをいったん準備したら、コンテナリポジトリの "git clone --recursive"を実行するだけで、Drupal、私の "contrib"モジュール(Drupalリポジトリのもの)+すべてのカスタムモジュールI drupal/sites/all/modules/customに追加されます。私はまだサブモジュールを適切なチェックアウトされたタグ付きリリースにすることが可能かどうか調べる必要があります...

私はgit-slave(サードパーティのアドオン)とgit-subtree )...

これはSVNが行うことができる何かが不足しているような気がします本当には簡単でまだeveryoenのようですGitを使用して苦労する...

+0

同じ問題です。私はdocroot/profiles/drupal_profileでgit repoを実行しており、drushはdocroot/profiles/drupal_profile/themesとdocroot/profiles/drupal_profile/modulesディレクトリ内に他のreposをダウンロードして、gitにこのプロファイルgit repoを追加させる方法はありません。 – kenorb

答えて

1

私は望んでいない答えであなたの質問に答えるのは嫌ですが、あなたのプロジェクトをdrush makeファイルyor contribモジュールのディレクトリを無視して、そのファイルをgitリポジトリに追加してください。

このようにして、モジュールのバージョンの変更のみを追跡し、drupals git reposがあなたのために行い、drushがプルダウンするすべてのコードを読み取るわけではありません。私はそれがgitサブモジュールをほぼ完全に使用する必要性を緩和することがわかったが、私の差分を掘り下げずにサイトの現在の状態を寄付されたモジュール自体に引き分けている。

+0

私が正しく理解していれば、Drush Make Filesは基本的に「このレポはここに行かなければならない」というスクリプトです。私は適用するパッチURLを指定することもできると思いますか? これは確かに1つの解決策ですが、それは非常にDrupal固有のものです(上記の私の例に合っていると思います)。 SVNが簡単にやっていて、しかもGitに追加されていない、本当に役に立つもののようです。 Drush Makeファイルも特定のタグにチェックアウトできますか? – Nick

+0

私はすでにこれを行うことができると思います。 [メインプロジェクトページ](http://drupal.org/project/drush_make)によると、CVS、SVN、git、bzrリポジトリからコードを "[チェックアウト]する"ことができます。より高度な使い方については、[バージョン管理URLを検出してインクルードするためのgenerate-makefileの拡張](http://drupal.org/node/943768)を参照してください。 – colan

1

これは非常に古い質問ですが、あなたがしようとしたことを正確に行うことができない理由は、gitは参照されたリポジトリへのポインタを格納する特別な "gitlink"特定のコミットに)、そのリポジトリ内のファイルについては絶対に何も知りません。その結果、最初のサブモジュール参照内のディレクトリは、スーパープロジェクトに関する限り存在せず、サブモジュールが使用するために予約されているので、実際にはgitインデックスで使用されないようにブロックされています。

これを行う方法は、drupalリポジトリを開始点として使用するプロジェクトを作成することです。 drupalプロジェクトをベースリポジトリのサブモジュールとして追加します。何から大きな違いを

git clone --recursive [email protected]/my-project.git 

を:

git remote set-url origin [email protected]/my-project.git 
git checkout -b my-branch-name 
git push -u origin my-branch-name 

をそして--recursiveで別の場所に複製する:あなたは、リモートを変更したり、新しいリモートを追加し、そこにプッシュすることができます

git clone http://git.drupal.org/project/drupal.git drupal 
cd drupal 
# add submdoules inside the original drupal repository 
git submodule add http://git.drupal.org/project/devel.git sites/all/modules/contrib/devel 
# even better drush does this for you (but might require you install git_deploy first): 
drush dl devel --package-handler=git_drupalorg --gitsubmodule 
# commit 
git commit -m"Add devel module" 

Drupalのルートは./drupalのサブフォルダの代わりにgitリポジトリのルートであるということです。Drupalルートの上のディレクトリにバージョントラッキングされたファイルが必要な場合は、このカスタマイズされたdrupalプロジェクトを別のスーパープロジェクトのサブモジュールとして追加できます。 - 再帰的にクローン化する限り、サブモジュールのサブモジュールに再帰します。

つまり、同じ作業空間のスーパープロジェクトとサブプロジェクトの両方で重い開発をすると、サブモジュールをコミットしてプッシュするだけでなく、スーパープロジェクトやリモートチェックアウトを更新してコミットする必要があるため、可能であれば、drupalルートをルートとして残すことをお勧めします。

関連する問題