ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

バージョン管理とは何だったのか

gitoliteの設定をいじっていた時にハマったことがあったのでめもめもです。

その1:リモート側で名状しがたいエラーが出てリポジトリの更新ができない

大元のリポジトリにpushしたらわざわpullしに行かなくてもミラーリポジトリが更新できるようにしたいなーっと思い、フンフフンとちょっと設定を変えて、終わったのでうまく動くか確認してみると、こんなことになってしまいました…

$git push
Enter passphrase for key '/c/Users/myname/.ssh/hoge':
Counting objects: 32, done.
Delta compression using up to 2 threads.
Writing objects: 100% (17/17), done.
Total 17 (delta 13), reused 0 (delta 0)
remote: remote: error: refusing to update checked out branch: refs/head/master
remote: remote: error: By default, updating the current branch in a non-bare repository
remote: remote: error: is denied, because it will make the index and work tree inconsisatant
remote: remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: remote: error: the work to HEAD.
remote: remote: error:
remote: remote: error: You can set 'receive.denyCurrentBranch'configuration variable to
remote: remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: remote: error: its current branch; however, this is not recommended unless you
remote: remote: error: arranged to update its work tree to match wat you pushed in some
remote: remote: error: other way.
remote: remote: error
remote: remote: error:To squelch this message and still keep default behaviour, set
remote: remote: error: 'recieve.denyCurrentBranch' configuration variable to 'refuse'.
remote: To /home/xxxx/certain/git/repository
remote:  - [deleted]       origin/master
remote: ! [remote rejected] master -> master (branch is currently checked out)
remote: Bad owner or permissions on /xxxx/xxxx/.ssh/config
remote: fatal: The remote end hung up unexpectedly
To gitolite@gitserver:hoge
   bf21aa0..f2b9422 master -> master

エラーなのはわかったから貴重な横幅を取らないでください原因はgitoliteの管理ユーザの設定ファイル(上のコードに下線を引いたところのファイル)のパーミッションでした。これが他のユーザにも見えていたため、エラーが起きてしまったようです。他のユーザに見えないように変えてやると、何事も無かったかのように動いてくれました。gitoliteの管理ユーザになり、このコマンドひとつで解決ですね。

$ chmod 600 /xxxx/xxxx/.ssh/config

参考にさせていただいたのはこちらです。助かりました。

ssh で Bad owner or permissions エラー | futuremix

http://futuremix.org/2005/10/openssh-config-permission

その2:よくわからないけど衝突が起きてリポジトリの更新ができない

これはどう考えても私の不注意です。

add せずにコミットしたら、行頭にdeleteのついたメッセージをやたら大量に吐き出してくれたので慌てて元に戻したんです。それがまずかったらしいですねええ。

$ git pull
fatal: loose object f2b942203b6a3ce514ac9529de4faebb69580d13 (stored in .git/objects/f2/b942203b6a3ce514ac9529de4faebb69580d13) is corrupt
fatal: The remote end hung up unexpectedly

というメッセージが表示され、pushもpullも出来ない困った状況に…

どうやらリポジトリをクローンし直すといいらしいという話を聞いたので、ファイルを一旦退避させ、クローンし直すことに。

$cd git/repositories
$mv repository repo_tmp
$git clone gitolite@gitserver:repository

大元のリポジトリも無事で、確認のためにpushやpullをすると問題なくメッセージが表示されました、めでたしめでたし。

それにしても今のところ私一人で使っているリポジトリなのに衝突が起きる時点でなにかおかしいと思うんですよ