Git で単一のブランチをクローンするにはどうすればいいですか? 質問する

Git で単一のブランチをクローンするにはどうすればいいですか? 質問する

にローカル Git リポジトリがあります~/local_repo。そこにはいくつかのブランチがあります:

$ git branch
* master
  rails
  c
  c++

ローカル リポジトリをクローンするには、次のようにします。

$ git clone ~/local_repo new_repo
Initialized empty Git repository in /home/username/new_repo/.git/

マスターnew_repoブランチはマスター ブランチを指しておりlocal_repo、プッシュ/プルが可能です。

しかし、別のブランチをクローンすることができません。 必要なブランチ (例rails) のみをプルして、新しいリポジトリに、デフォルトで のブランチにプッシュしてプルするブランチが含まれるようにしmasterたいです。 これを実現するにはどうすればよいでしょうか。あるいは、マスターを追跡するのと同じような方法があるでしょうか。local_reporailslocal_repolocal_repo

ベストアンサー1

注: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であり、クローンされたブランチを参照するものではありません。
  • <folder>リポジトリをクローンするローカルフォルダです

それをここで見ることができます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 月) 以降、シャロー クローンではデータ転送 (プッシュ/プル) がサポートされるようになったため、このオプションはさらに便利になりました。
詳細については、「git clone --depth 1(浅いクローン) は、想像以上に便利ですか?「」。


浅いクローンを元に戻す方法については、「浅いクローンを完全なクローンに変換する" (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年3月5日)

clone: --recurse-submodules 中に --single-branch を渡す

署名者: エミリー・シェイファー
承認者: ジェフ・キング

以前は、「git clone --recurse-submodules --single-branch」を実行すると、スーパープロジェクトが 1 つのブランチのみを複製したにもかかわらず、サブモジュールがすべてのブランチを複製していました。

--single-branchサブモジュール ヘルパー フレームワークをパイプしてclone、後で '' に到達できるようにします。

おすすめ記事