1. ホーム
  2. git

[解決済み] git shallow clone (clone --depth) はリモートブランチを見逃す

2022-07-01 23:20:19

質問

リモートリポジトリをクローンした後、-a オプションでリモートブランチが表示されません。何が問題なのでしょうか?どのようにデバッグすればよいのでしょうか。このスニペットでは、リモートブランチのうち2つが表示されていません。

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git --version
git version 1.8.3.1

別のマシンで同じコマンドを試したところ、うまくいきました。

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/debian
  remotes/origin/master
  remotes/origin/python_codegen
$ git --version
git version 1.7.1

別のレポのクローンも試しましたが、うまくいきました。しかし、私は再びこのマシン上でそれを試すことができますが、それは何が間違っているかを知る方がよいでしょう。

何か提案やヒントがあれば、大歓迎です。

編集:回答要約:git バージョン 1.8.3.2 以降、以前と同じ動作を得るためには "-depth"と "--no-single-branch"を一緒に使用する必要があるようです。これはバグ修正とみなされます。

どのように解決するのですか?

動作は正しく、最後のリビジョンの後、master-branch は(これがプライマリリモートの HEAD であるため)リポジトリ内の唯一のリモートブランチとなります。

florianb$ git branch -a
        * master
          remotes/origin/HEAD -> origin/master
          remotes/origin/master

完全なクローンは新しい(すべての)ブランチを提供します。

florianb$ git branch -a
        * master
          remotes/origin/HEAD -> origin/master
          remotes/origin/debian
          remotes/origin/master
          remotes/origin/python_codegen


シャロークローン

により 浅い説明 を技術文書に記載した場合、" git-clone --depth 20 repo [したがって、浅いクローンはブランチの先端から、要求されたコミットの深さを含む必要があります。

のドキュメントにあるように - 加えて - git clone に対して --single-branch -というオプションが記述されています。

"単一のブランチの先端につながる履歴のみをクローンします。 --branch オプションか、プライマリブランチリモートの HEAD を指しています。 でシャロークローンを作成する場合 --depth オプションで浅いクローンを作る場合、これはデフォルトです。 --no-single-branch が与えられれば、すべてのブランチの先端付近のヒストリを取得します。 "です。

そのため、浅い クローン ( 深さ -オプション) のみ フェッチ のみ 1つの単一ブランチ (要求された深さでの)1つのブランチのみです。


残念ながら、両方のオプション ( --depth--single-branch ) は過去に欠陥があり、浅いクローンの使用は未解決の問題 (上に投稿したリンクで読むことができます) を暗示し、それは与えられた歴史の書き換えによって引き起こされます。これは、全体として、特殊なケースでやや複雑な動作につながります。