2

私はこれについてかなりの検索を行いましたが、頭に釘を打つ結果はありませんでした.

$ 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 リポジトリから) が取得されます。 + に追加するカスタム モジュールdrupal/sites/all/modules/custom。サブモジュールを適切なチェックアウトされたタグ付きリリースにすることが自動的に可能かどうか、まだ調査する必要があります...

git-slave (サードパーティのアドオン) と git-subtree (すべてのサブモジュールをブランチに追加し、それらを所定の位置にマージすることと関係があるように見えました?!) に関する投稿を見てきました...

これはSVNが本当に簡単にできることですが、誰もがGitの使用に苦労しているように見えるので、何かが欠けているように感じます...

4

2 に答える 2

1

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

これを行う方法は、drupal リポジトリを出発点として使用するプロジェクトを作成することです。基本リポジトリのサブモジュールとして drupal プロジェクトを追加します。

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"

リモートを変更するか、新しいリモートを追加して、そこにプッシュできます。

git remote set-url origin git@my-git-host.foo/my-project.git
git checkout -b my-branch-name
git push -u origin my-branch-name

--recursive を使用して別の場所に複製します。

git clone --recursive git@my-git-host.foo/my-project.git

あなたがしようとしたこととの大きな違いは、Drupal のルートが ./drupal のサブフォルダーではなく、git リポジトリのルートであることです。drupal ルートの上のディレクトリにバージョン追跡ファイルが必要な場合は、このカスタマイズされた drupal プロジェクトを別のスーパープロジェクトのサブモジュールとして追加できます。--recursive で複製する限り、期待どおりにサブモジュールのサブモジュールに再帰します。

とはいえ、同じ作業スペースでスーパープロジェクトとサブプロジェクトの両方で大量の開発を行うと、サブモジュールをコミットしてプッシュするだけでなく、スーパープロジェクトを更新してコミットする必要があるか、リモートチェックアウトで必要な参照が失われるため、面倒な場合があります。可能であれば、drupal ルートをルートのままにしておくことをお勧めします。

于 2014-11-20T04:01:02.387 に答える
1

望まない回答であなたの質問に答えるのは嫌いですが、プロジェクトを drush make ファイルに基づいて作成することを検討してください (そして、contrib モジュール ディレクトリを無視して、そのファイルを git リポジトリに追加します。

このようにして、モジュールのバージョンへの変更のみを追跡し、drupal git repos が実行し、drush がプルダウンする元のコード自体のすべてを追跡するわけではありません。差分を台無しにすることなく、サイトの現在の状態を提供されたモジュール自体に個別に結び付けながら、git サブモジュールを使用する必要性がほぼ完全に軽減されることがわかりました。

于 2012-02-16T15:57:51.517 に答える