git でリモートリポジトリを clone する際、特定のブランチだけ取ってきたい

$ git clone -b [branch] --single-branch [remote-repository]

でした。

古い文章だと

$ mkdir test
$ cd test
$ git init
$ git remote add [remote] [remote-repository]
$ git fetch [remote]
$ git co [branch]

って書いてるのもあるけど、これだと remote tracking branch がリモートリポジトリにある全ブランチ分できてしまうのに対し、 --single-branch ではその時 -b で指定したブランチ分のみできる。

--single-branch で clone すると、それ以降の git fetch [remote] でも --single-branch した時のブランチだけが fetch されて来ます。賢い!!。

.git/config を見ると

普通にやると

[remote "github"]
    url = git@github.com:oogatta/brook.git
    fetch = +refs/heads/*:refs/remotes/github/*

--sinble-branch なら

[remote "origin"]
    url = git@github.com:oogatta/brook.git
    fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

って fetch 先のブランチの指定がされてますね。勤務先ではリモートリポジトリの中のブランチが無数になりがちで、自分のチームのリポジトリなら、いつも全ブランチ分トラッキングブランチが手元にあってまったく問題無いのですけど、他チームのコードのレビューするときや一瞬動作確認したい!とか言う時に使っています。

object 数を比べる

  • オプション無し
  • single-branch
  • single-branch + depth1

をそれぞれ実際に実行してみました。

$ git clone https://github.com/jquery/jquery.git jquery                                                                                                                                        
Cloning into 'jquery'...
remote: Counting objects: 30549, done.
remote: Compressing objects: 100% (8838/8838), done.
remote: Total 30549 (delta 22392), reused 29052 (delta 21081)
Receiving objects: 100% (30549/30549), 15.03 MiB | 288 KiB/s, done.
Resolving deltas: 100% (22392/22392), done.
$ git clone --single-branch -b master https://github.com/jquery/jquery.git jquery_single
Cloning into 'jquery_single'...
remote: Counting objects: 28727, done.
remote: Compressing objects: 100% (8244/8244), done.
remote: Total 28727 (delta 21051), reused 27325 (delta 19855)
Receiving objects: 100% (28727/28727), 14.65 MiB | 197 KiB/s, done.
Resolving deltas: 100% (21051/21051), done.
$ git clone --depth 1 --single-branch -b master https://github.com/jquery/jquery.git jquery_single_depth1                                                                                      
Cloning into 'jquery_single_depth1'...
remote: Counting objects: 243, done.
remote: Compressing objects: 100% (217/217), done.
remote: Total 243 (delta 9), reused 130 (delta 1)
Receiving objects: 100% (243/243), 548.00 KiB | 196 KiB/s, done.
Resolving deltas: 100% (9/9), done.

とにかく特定のブランチの file tree を持ってきたい。歴史は知らなくていい。だと depth 1 が圧倒的なんですね。当たり前ですね…。