リモートリポジトリを複製した後、-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」を一緒に使用して、以前と同じ動作をする必要があります。これはバグ修正と見なされます。
動作は正しいです。最後のリビジョンの後、マスターブランチは(これがプライマリリモートの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
技術文書の shallow-description により、「git-clone --depth 20 repo
[...] result [s]] chain with length of 20」したがって、浅いクローンには、ブランチの先端から、要求されたコミットの深さを含める必要があります。
として-さらに-git clone
-オプションの --single-branch
の説明は次のとおりです。
「
--branch
オプションまたはプライマリブランチのリモートのHEAD
が指す単一ブランチの先端につながる履歴のみをクローンします。--depth
オプション付きの浅いクローン、これはデフォルトです。ただし、--no-single-branch
がすべてのブランチの先端付近の履歴を取得するために指定されている場合を除きます。 "
したがって、浅いclone(withthedepth-option)onlyfetchesonly1つの単一ブランチ(要求された深さで)。
残念ながら、両方のオプション(--depth
と--single-branch
)は過去に欠陥があり、浅いクローンの使用は未解決の問題を暗示しています(上記のリンクで読むことができます)。履歴書き換え。これにより、特殊なケースでは全体的にやや複雑な動作になります。
浅いクローンを作成した後、リモートから他のブランチをチェックアウトする、
実行(@jthillに感謝):
git remote set-branches Origin '*'
その後、git fetch -v
を実行します
最後にgit checkout the-branch-i-ve-been-looking-for
ステップ1は、.git/config
を編集して手動で行うこともできます。
たとえば、次の行を次のように変更します。
fetch = +refs/heads/master:refs/remotes/Origin/master
に(master
を*
に置き換えます):
fetch = +refs/heads/*:refs/remotes/Origin/*
@jthillからの応答とコメントを読んで、私にとって最も効果的なのは、 set-branches
コマンドでgit remote
オプションを使用することでした。
$ git clone --depth 1 https://github.com/dogescript/dogescript.git
$ git remote set-branches Origin 'remote_branch_name'
$ git fetch --depth 1 Origin remote_branch_name
$ git checkout remote_branch_name
これにより、指定されたリモートによって追跡されるブランチのリストが変更され、必要なブランチのみをフェッチおよびチェックアウトできるようになります。