はじめに
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>
おわりに
今までできていてなぜ急にできなくなったのかは現在も不明(何らかの操作時に設定が書き換わった?)なんですが、同様の現象起きた人がいた場合には助けになれば幸いです。
参考