LoginSignup
0
0

なぜかfetchしてもブランチの情報が取得できない

Last updated at Posted at 2024-02-14

はじめに

Jenkinsでビルドをかけているのですが、ブランチの切替時に次のようなエラーが出ました

error: pathspec 'ブランチ' did not match any file(s) known to git

毎回fetchして取得しているはずなのですが、
なぜか急にできなくなったので、その解決法になります。
なお、shallow cloneでクローンしたプロジェクトになります。

環境

  • macOS Monterey 12.6
  • Jenkins 2.372

解決

最初に解決方法ですが、いろいろ試した結果、解決したのは以下のコマンドでした

$ git remote set-branches origin '*'

ローカルリポジトリが全てのリモートリポジトリのブランチを追跡するという設定になるようです。

解決しなかったけど試したこと

他に次のようなことを試してみました

直接fetchしてみる

シェルスクリプトからやっているのが悪いのかと思い、ターミナルからgit fetchを実行してみましたがもちろんだめでした。

unshallowしてみる

はじめにも記載しましたが、shallow cloneで最後のコミットのみ取得してきているため、

$ git fetch --unshallow

で全ての履歴を取得するようにしてみました。
が、これだけではだめだったようです。

なにか悪いキャッシュが残ってる?のかと思って削除してみる

$ git rm -r --cached .

キャッシュの問題ではなかったので、何も起きませんでした。

他にもこれで解決しそう?

全てのリモートをフェッチする

全てのリモートをフェッチするとなっているが、これでも取得できる?
おそらく解決しなさそうですが、一応記載

$ git fetch --all

手動で .git/config ファイル変更

解決法にあるコマンドの結果を直接ファイルに記載するという方法です

[remote "origin"]
    url = <リモートリポジトリのURL>
    fetch = +refs/heads/*:refs/remotes/origin/*

違うコマンドで.git/config ファイル変更

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

こちらのコマンドでも同様にconfigファイルが変更されるようです

クローンするときの設定を変える

--no-single-branchのオプションを加えることで、全てのブランチの最新履歴を取得するようです

$ git clone --depth 1 --no-single-branch <リモートリポジトリのURL>

おわりに

今までできていてなぜ急にできなくなったのかは現在も不明(何らかの操作時に設定が書き換わった?)なんですが、同様の現象起きた人がいた場合には助けになれば幸いです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0