へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

さっそくMercurial+hg-git+Githubでpushできない問題が出て、その解決

教訓を積んだので

$ hg push --debug --traceback -v

と出力を見ながらやってみる。

pushing to git+ssh://git@github.com:harukaeru/Hg.git
ZERO here comes←これはぼくがモジュールにprint文を追加しただけ
calling ssh: ssh git@github.com 'git-receive-pack '\''harukaeru/Hg.git'\'''
Enter passphrase for key '/home/vagrant/.ssh/id_rsa':
searching for changes
2 commits found
list of commits:
e2e4161417adb45287408efacdd105069110efb9
7b68eda82214a196d406b593e053559658f565d3
adding objects
Traceback (most recent call last):
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 140, in _runcatch
return _dispatch(req)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 860, in _dispatch
cmdpats, cmdoptions)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 621, in runcommand
ret = _runcommand(ui, options, cmd, d)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 951, in _runcommand
return checkargs()
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 922, in checkargs
return cmdfunc()
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/dispatch.py", line 857, in
d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/util.py", line 711, in check
return func(*args, **kwargs)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/commands.py", line 5115, in push
bookmarks=opts.get('bookmark', ()))
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/mercurial/extensions.py", line 194, in wrap
return wrapper(origfn, *args, **kwargs)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/hg_git-0.8.0-py2.7.egg/hggit/util.py", line 42, in inner
return f(*args, **kwargs)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/hg_git-0.8.0-py2.7.egg/hggit/__init__.py", line 258, in exchangepush
pushop.cgresult = repo.githandler.push(remote.path, revs, force)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/hg_git-0.8.0-py2.7.egg/hggit/git_handler.py", line 310, in push
old_refs, new_refs = self.upload_pack(remote, revs, force)
File "/home/vagrant/.virtualenvs/perfect/lib/python2.7/site-packages/hg_git-0.8.0-py2.7.egg/hggit/git_handler.py", line 976, in upload_pack
raise hgutil.Abort(_("git remote error: ") + str(e))
Abort: git remote error: refs/heads/44dd6b04ea66de46ce84fbffbfeedcf2fc30f593, refs/heads/master failed to update
abort: git remote error: refs/heads/44dd6b04ea66de46ce84fbffbfeedcf2fc30f593, refs/heads/master failed to update

git_handler.pyを見に行くが、
よくわからん
gen_packの中でなんか問題が起こっているようだった。

一番ためになったのがここ


"abort: git remote error: refs/heads/master failed to update" when pushing to local clone · Issue #236 · schacon/hg-git · GitHub

なんか知らんけどこの報告の仕方は作者をイラつかせるだろ……とおもった。
作者的には『タダで作ってんねやぞ!じゃあお前がやれ!』って感じだろう。
事実そのように言っている。

Moving refs in non-bare repos can fail. Nothing can be done on the
hg-git side.

If you want support (rather than reporting a bug or feature request), I
suggest you try the hg-git Google Group.

これは、『(空だったレポジトリ【bare repos】から)何かしら入っているレポジトリに参照が移ると失敗するよ』と言っているんだろう。

【non-bare repos】のときは失敗するよという意味ではないと思う。
だって普通はそんな変なもん作らんし。

hg-git側からできることは何もないよとも言っている。(GitHubの問題なのか?知らんけど)

つまり
『新規で作ったレポジトリ』をcloneして、そこにpushすることはできるけど、
push後に空じゃなくなったレポジトリにはコミットできないってことだろう!!!(憶測)

ということで、
別のディレクトリ作ってそっちで既に中身のあるレポジトリ

$ hg clone ~~~~~~

してみた。
ちなみにhttps://を試してみたら、406エラー返された。

$ hg add .
$ hg commit

〜少年コミットコメント入力中〜

$ hg push

そして成功した。念のために何回かpushしたけどそれも成功した。

やったぜ。