![[git / python] python を利用する GitHub リポジトリの branch 名にはシャープ](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMzI3NDA3JTJGcHJvZmlsZS1pbWFnZXMlMkYxNTQ0OTUyMTkzP2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZmbT1wbmczMiZzPTFlODcyMDJhODc4ZTFjMTVjOTRlMzYyMzc0YWUxOGEx%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D61615cf2f631d4f601c5083f7a81fff6?ixlib=rb-4.0.0&w=1200&fm=jpg&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JTVCZ2l0JTIwJTJGJTIwcHl0aG9uJTVEJTIwcHl0aG9uJTIwJUUzJTgyJTkyJUU1JTg4JUE5JUU3JTk0JUE4JUUzJTgxJTk5JUUzJTgyJThCJTIwR2l0SHViJTIwJUUzJTgzJUFBJUUzJTgzJTlEJUUzJTgyJUI4JUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgxJUFFJTIwYnJhbmNoJTIwJUU1JTkwJThEJUUzJTgxJUFCJUUzJTgxJUFGJUUzJTgyJUI3JUUzJTgzJUEzJUUzJTgzJUJDJUUzJTgzJTk3JTIwJTIyJTIzJTIyJTIwJUUzJTgyJTkyJUU0JUJEJUJGJUUzJTgxJTg2JUUzJTgxJUFBJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9MDAxYjU4YmY5NWE0MTg1ZGZjNjhjZDJjZDAxMTQxYTQ&mark-x=120&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBzaXJ1a3U2JnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9MGY0ZGY4YjE3ZmMzYTc5YzIxODU3NDg2YWY2MzY0ZTE&blend-x=242&blend-y=480&blend-w=838&blend-h=46&blend-fit=crop&blend-crop=left%2Cbottom&blend-mode=normal&s=6e461cded0a15a279488fbb1a6ac052f)
タイトルの通りです。
理由は、 GitHub リポジトリから直接ブランチ名を指定して pip install する時に、シャープ “#” があると install できないからです。
2-1. ダメな例
例えば、 pip install "git+https://github.com/username/repository-name.git@issue#15" のように、@以下のブランチ名のところに、#の入っているブランチ名を指定すると、以下のように失敗します。
$ pip install "git+https://github.com/username/repository-name.git@issue#15"
Collecting git+https://github.com/username/repository-name.git@issue#15
Cloning https://github.com/username/repository-name.git (to revision issue) to /tmp/pip-req-build-mhfc7612
Running command git clone --filter=blob:none --quiet https://github.com/username/repository-name.git /tmp/pip-req-build-mhfc7612
WARNING: Did not find branch or tag 'issue', assuming revision or ref.
Running command git checkout -q issue
error: pathspec 'issue' did not match any file(s) known to git
error: subprocess-exited-with-error
× git checkout -q issue did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× git checkout -q issue did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
2-2. うまくいく例
ところが、ブランチ名を変えて、例えば # の部分を - などに変えてあげるとうまくいきます。
こんな感じ
pip install "git+https://github.com/username/repository-name.git@issue-15"
# 先にブランチ名を変えて、新しいブランチを GitHub に push しておく
$ git branch -m issue#15 issue-15
$ git push origin issue-15
# 新しい名称の branch を指定する
$ pip install "git+https://github.com/username/repository-name.git@issue-15"
たったこれだけなのですが、ずっと上手くいかなかった pip install が成功するようになりました。
元々は issue#15 というブランチ名を指定していたつもりなのですが、エラーメッセージを見ると以下のように書かれていたので、
WARNING: Did not find branch or tag 'issue', assuming revision or ref.
おそらくですが、 # は、 python でいうところの「予約語」のようなものに該当するのではないでしょうか。
そのため、# 以降が無視されて、その手前の部分のみの名称 (issueという名前) のブランチを GitHub 上で探してしまい、結果的にはブランチが見つからずじまいになってしまっていました。
これまで私はずっと branch 名に # を使ってきましたが、「もう2度と使わないぞ」と思うようになりましたとさ…(´^ω^`)
Views: 2
