2015年02月22日

githubでpushすると403エラーになる場合

githubで作成したレポジトリを以下のようにcloneしてきてました。
$ git clone https://github.com/ajisaba/DeviceDetect.git
Initialized empty Git repository in /home/username/github/DeviceDetect/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.


ファイルの追加などをコミットしてPUSHすると、以下のような403エラーになります。
$ git push -u origin master
error: The requested URL returned error: 403 Forbidden while accessing https://g
ithub.com/ajisaba/DeviceDetect.git/info/refs


原因が分からなかったのでネットで調べると、以下が見つかりました。
git push origin masterしたら403エラー出た時の対処
githubでいつもと違うPCからHTTPSの認証を使ってgit pushする場合の手順
(Stackoverfllow) Pushing to Git returning Error Code 403 fatal: HTTP request failed

これらを参考にして、.git/configの中身を確認。
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://github.com/ajisaba/DeviceDetect.git
[branch "master"]
remote = origin
merge = refs/heads/master


参考ページより、https接続の場合は、urlにgithubのユーザー名が必要ということです。
url = https://[ユーザー名]@github.com/[ユーザー名]/[レポジトリ]


例えばユーザー名がajisabaの場合、以下のようになります。ただし、この指定方法ではpushするたびにパスワードを求められます。
url = https://ajisaba@github.com/ajisaba/DeviceDetect.gi


他に、ssh接続を使う方法もあります。sshの場合、urlはssh://URLになります。SCPコマンドのような省略形を使うこともできます。
url = ssh://git@github.com/ajisaba/DeviceDetect.git
url = git@github.com:ajisaba/DeviceDetect.git  (省略形)


参考、
4.1 Git サーバー - プロトコル

毎回のパスワード入力は手間なので、今回はsshの省略形でurlを指定することにしました。
そのため .git/config を以下のように修正してpushをすると、エラーが無くなりpushに成功しました。
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:ajisaba/DeviceDetect.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master


posted by jun1 at 19:44| Comment(0) | TrackBack(0) | ソフト