[Git] depthをつけてcloneしたらリモートブランチにチェックアウトできない時の対策

GitでCloneしようとしたらなぜか失敗する場合以下のコマンドでcloneできる場合があります。
原因は大きなファイルがコミットされていてサーバー側でエラーになったりしているようです。

$ git clone --depth 1 https://hogehoge

上記のクローンの仕方をshallow cloneと言うそうですが、この状態でリモート(サーバー)にあるmaster以外のブランチを落とそうとした時にできません。
そんな時には、以下の手順でリモートのブランチをチェックアウトできます。

方法

  1. リモートのブランチが作成された状態までコミット履歴を取得する
  2. .git/configにリモートブランチの情報を書き込む
  3. fetchする

リモートのブランチが作成された状態までコミット履歴を取得する

ブラウザなどで目的のブランチが枝分かれしたコミットを探して、そこまで遡ってコミットを取得します。

$ git fetch --depth 20      # 20階層下まで履歴を取得

.git/configにリモートブランチの情報を書き込む

.git/configを開くを以下のようになっています。
注目するのはorigiセクションでここにfetch = +refs/xxxxとありますがここにフェッチしたいブランチを追記します。

:
[remote "origin"]
 fetch = +refs/heads/master:refs/remotes/origin/master
    # hogeブランチを追加する
 fetch = +refs/heads/hoge:refs/remotes/origin/hoge
    # ----- ここまで ------
[branch "master"]
 remote = origin
 merge = refs/heads/master
:

fetchする

ここまでの状態でもう一回fetchすると目的のブランチが表示されるようになります。

$ git fetch

あとはいつも通りブランチを切り替えることができます。

参考URL

0 件のコメント :

コメントを投稿