web-dev-qa-db-ja.com

サブモジュールを含む "git clone"方法は?

サブモジュールをリポジトリに入れようとしています。問題は、親リポジトリを複製したときに、サブモジュールフォルダが完全に空になっていることです。

git clone parent_repoが実際にサブモジュールフォルダーにデータを入れるようにする方法はありますか?

例えば、 http://github.com/cwolves/sequelize/tree/master/lib/ のように、nodejs-mysql-nativeは外部のgitサブモジュールを指していますが、sequelizeプロジェクトをチェックアウトすると、そのフォルダーは空です。

1718
Mark

Gitのバージョン2.13以降では、--recurse-submodulesの代わりに--recursiveを使用できます。

git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar

編集者注:-j8は、バージョン2.8で利用可能になったオプションのパフォーマンス最適化であり、一度に最大8つのサブモジュールを並列にフェッチします - man git-cloneを参照してください。

Gitのバージョン1.9からバージョン2.12まで(-jフラグはバージョン2.8+でのみ利用可能):

git clone --recursive -j8 git://github.com/foo/bar.git
cd bar

Gitのバージョン1.6.5以降では、次のものを使用できます。

git clone --recursive git://github.com/foo/bar.git
cd bar

すでにクローンされているリポジトリ、または古いGitバージョンの場合は、次のようにします。

git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive
2659
Mathias Bynens

サブモジュールがいっぱいになる前に、2つのことをしなければなりません:

git submodule init 
git submodule update
427
LiraNuna

オリジナルの答え2010

joschi がコメントで述べているように、git submodule--recursiveオプションをサポートするようになりました(Git1.6.5以降)。

--recursiveが指定されている場合、このコマンドは登録されているサブモジュールに再帰し、その中のネストされているサブモジュールをすべて更新します。

gitサブモジュールを再帰的に扱う initの部分を参照してください。
git submoduleの説明を参照してください。

Git以降のバージョン1.6.5では、–-recursiveオプションを付けてスーパープロジェクトを複製することでこれを自動的に行うことができます。

git clone --recursive git://github.com/mysociety/whatdotheyknow.git

Git 2.8で2016を更新しました:「 git clone --recursiveを使ってgitサブモジュールのダウンロードを高速化/並列化するにはどうすればいいですか? 」を参照してください。

複数のスレッドを使用して、並行してサブモジュールの取得を開始できます。
インスタンスについて:

git fetch --recurse-submodules -j2
162
VonC

このコマンドを使用して、すべてのサブモジュールでリポジトリを複製できます。

git clone --recursive YOUR-GIT-REPO-URL

プロジェクトを既にクローンしている場合は、次のものを使用できます。

git submodule init
git submodule update
55
Javier C.

サブモジュールがブランチに追加された場合は、必ずそれをクローンコマンドに含めてください。

git clone -b <branch_name> --recursive <remote> <directory>
30
Mars Redwyne

これを試して:

git clone --recurse-submodules

サブプロジェクトがすでに親プロジェクトに追加されていると仮定して、サブモジュールのデータを自動的に取り込みます。

26
nweiler

遅い答え

// git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
git clone --recursive https://[email protected]/USERNAME/REPO.git DESTINATION_DIR

あなたがBitBucketの管理者権限を持っていても、私はちょうど1時間を友人といじって過ごしたとしても、常にORIGINALリポジトリをクローンしてリポジトリを所有する人のパスワードを使用してください。あなたがこのミニトラップに出くわしたことを知りたくてたまらない:P

19
kaiser

Gitリポジトリにサブモジュールを含めるためにこれを試してください。

git clone -b <branch_name> --recursive <remote> <directory>

または

git clone --recurse-submodules
17
radhey shyam

私はあなたが3つのステップで進むことができると思います、

git clone
git submodule init
git submodule update
12
muhammad ali

リポジトリのクローンを作成するときに--recursiveフラグを使用できます。このパラメータはリポジトリに定義されているすべてのサブモジュールのクローンを作成するように強制します。

git clone --recursive [email protected]:your_repo.git

クローン作成後、サブモジュールのブランチが変更されることがあるので、その後にこのコマンドを実行します。

git submodule foreach "git checkout master"
12
Ahmad Azimi

サブモジュール並列フェッチは、一度に複数のリポジトリーをフェッチできるようにすることで、リポジトリーとそのすべての関連サブモジュールをフェッチするのに必要な時間を短縮することを目的としています。これは新しい--jobsオプションを使うことで達成できます。

git fetch --recurse-submodules --jobs=4

Gitチームによると、これは多くのサブモジュールを含むリポジトリの更新をかなりスピードアップすることができます。新しい--jobsオプションを指定せずに--recurse-submodulesを使用すると、Gitはサブモジュールを1つずつ取得します。

ソース: http://www.infoq.com/news/2016/03/git28-released

10
Long Nguyen

[素早い回答]

親リポジトリ(一部のサブモジュールリポジトリを含む)を複製した後、次のようにします。

git submodule update --init --recursive
9
Benyamin Jafari

これを試して。

git clone -b <branch_name> --recursive <remote> <directory>

サブモジュールをブランチに追加した場合は、必ずそれをcloneコマンドに追加してください。

3
Himeshika96

GitHubリポジトリでも同じ問題が発生しました。アカウントにSSHキーがありませんでした。プロセスは

  1. SSHキーの生成
  2. GitHubアカウントに新しいSSHキーを追加する

次に、サブモジュール(git clone --recursive YOUR-GIT-REPO-URL)でリポジトリを複製できます

または

git submodule initおよびgit submodule updateを実行して、すでに複製されたリポジトリのサブモジュールを取得します。

1
FatalError

新しいプロジェクトの場合は、次のようにできます。

$ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName 

既にインストールされている場合:

$ cd YourProjectName (for the cases you are not at right directory) 
$ git submodule init
$ git submodule update
0
nzrytmn