@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

= gitで共有リポジトリ作る

[2011-04-17 22:56:53]
>>>[git]

RubyDrop使ってみた

RubyDropってご存知?DropboxをgitとRubyで自前構築するやつです.

友達とdropbox的な共有フォルダを使いたくなって導入してみました.

gitではまった

結論としては,

git init --bare --shared

の--sharedがついてなかったから

発端

RubyDropでファイルが共有されてないって言われたから,共有してるフォルダでgit statusとかgit pullとかgit pushしてみたら,

% git push
Counting objects: 22, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (17/17), 1.84 KiB, done.
Total 17 (delta 10), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To hogehoge.com:/hoge/share
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'hogehoge.com:/hoge/share'

とか怒られました.

友達はpull,pushできたので,share用になってないんだな.と.chmod -R go+xsだけではだめなんですね.

途中から--shared付ける方法わからなかったので,リモートの適当な新しいディレクトリで

% sudo git init --bare --shared
% sudo chmod -R go+xs .

して仮の新リポジトリを作って,手元(ローカル)のディレクトリで

% git remote add hoge hogehoge.com:/hoge/share
% git push hoge master
% git remote rm hoge

しました.これで仮のリポジトリが最新になったね.これをもとのbareリポジトリと入れ替えたら友達のところでも自分のところでもpush,pullできるようになりました.

RubyDropとかGritとかloggerとかひどい

  • RubyDropでもDropboxみたいにポップアップ通知してほしいよね.ってことでGrowl対応したいね.
  • Gritがuntrackedをしらべる時に,マルチバイト文字ファイル名に含まれてるとcommitされてpushされてもまたuntrackedになってるのをなんとかしたい.

内部構造みたら,数値参照とUTF-8の文字列が混ざってて比較して別のファイル名扱いになってるっぽい.

  • あとloggerがログファイルのサイズでログローテートする時にファイルが見つからんとかほざいてローテーションに失敗しはる.hoge.logをhoge.log.0にローテートするのにhoge.log.0は無いに決まってるやん.

あれか,hoge.log.1を作る時に1-1 = 0番目をローテートしようとしてエラーになってるのか.納得バーカバーカ