1. ホーム
  2. git

[解決済み] Git で単一のブランチをクローンする方法を教えてください。

2022-03-19 21:11:13

質問

私はプロジェクトのスケルトンを保存するために使用する 'skeleton'というローカルのGitリポジトリを持っています。このリポジトリには、さまざまな種類のプロジェクト用にいくつかのブランチがあります。

casey@agave [~/Projects/skeleton] git branch
* master
  rails
  c
  c++

新しいプロジェクトの master ブランチをチェックアウトしたい場合は、次のようにします。

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

で、すべてが思い通りになりました。具体的には、新しい master ブランチはスケルトン master ブランチを指しており、私はプロジェクトの基本設定を変更するためにプッシュやプルを行うことができます。

しかし、うまくいかないのは、別のブランチをクローンしたい場合です。必要なブランチだけをプルするようにすることはできず、たとえば rails ブランチを作成し、新しいリポジトリには master ブランチにプッシュし、スケルトンリポジトリの rails ブランチがデフォルトで使用されます。

何か良い方法はないでしょうか?あるいは、これはGitが私に望んでいる構成方法ではないのかもしれません。複数のリポジトリを用意して、Ruby on Railsのスケルトンリポジトリがマスターのスケルトンリポジトリを追跡するようにしたらどうでしょうか。そして、個々のプロジェクトはRuby on Railsのスケルトンリポジトリをクローンします。

解決方法は?

git1.7.10 (2012年4月) を実際に使用することができます。 1つのブランチだけをクローンする :

# clone only the remote primary HEAD (default: origin/master)
git clone <url> --single-branch

# as in:
git clone <url> --branch <branch> --single-branch [<folder>]

( <url> はリモートリポジトリの URL であり、クローンされたブランチ自身を参照するものではありません)

で見ることができます。 t5500-fetch-pack.sh :

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

東武 コメント ということです。

これは、シャロークローンを行う際に暗黙のうちに行われるものです。
これにより git clone --depth 1 は、帯域幅を節約する最も簡単な方法です。

また、Git 1.9.0(2014年2月)からシャロークローンがデータ転送(push/pull)に対応したので、そのオプションは今よりもっと便利になりました。
詳しくは"でご覧ください。 git clone --depth 1 (浅いクローン)は意外と便利? "。


浅いクローンを元に戻す方法については、「"Undoing"」に詳細が記載されています。 シャロークローンからフルクローンへの変換 " (git 1.8.3+)

# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.origin.fetch refs/heads/*:refs/remotes/origin/*
git fetch --unshallow

として クリス のコメントです。

消えた枝を元に戻すための魔法のセリフ --single-branch です(git v2.1.4)。

git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch --unshallow  


Git 2.26 (2020年第1四半期) で、" git clone --recurse-submodules --single-branch " サブモジュールのクローンを作成する際に、同じシングルブランチオプションを使用するようになりました。 .

参照 コミット 132f600 , コミット 4731957 (2020年2月21日)による エミリー・シェイファー( nasamuffin ) .
(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミットb22db26 2020年03月05日)

<ブロッククオート

clone : --recurse-submodule中に-single-branchを渡す。

<上 サインオフ:Emily Shaffer
Acked-by: ジェフ・キング

前回は、"を演奏。 git clone --recurse-submodules --single-branch "は、スーパープロジェクトが1つのブランチしかクローンしていないにもかかわらず、サブモジュールがすべてのブランチをクローンする結果となりました。

パイプ --single-branch をサブモジュール・ヘルパー・フレームワークに通して、' clone ' を後で実行します。