nDiki : Git

2013年5月18日 (土)

今日のさえずり: Naney洗濯機の使い方がわからぬ

naney:8750406466

2013年05月18日

[ 5月18日全て ]

2013年7月29日 (月)

今日のさえずり: ぼっち席って

2013年07月29日

[ 7月29日全て ]

2013年9月18日 (水)

今日のさえずり: トピックブランチに統合ブランチを安易にマージしちゃ駄目

2013年09月18日

[ 9月18日全て ]

2013年9月27日 (金)

Geeknote を使って EmacsEvernote ノートMarkdown 形式で編集

Evernote、やっぱり Emacsノート書きたいよね。Emacs evernote mode はメンテナンスが止まっているようなので Geeknote を試してみた。Markdown が使えるのでいい感じ。

インストール

本家 Geeknote は Evernote 2段階認証をかけているとログインできないので、2段階認証パッチをあててあるのを使う。~/local/geeknote 以下に Git でもってくる。

 git clone git://github.com/VitaliyRodnenko/geeknote.git
 cd geeknote
 git remote add cwoac git://github.com/cwoac/geeknote.git
 git fetch cwoac
 git checkout -b cwoac-master cwoac/master

Debian GNU/Linux sid だと SQLAlchemy のバージョンが新しいので一部パッチをあてる必要あり。

 diff --git a/lib/sqlalchemy/orm/__init__.py b/lib/sqlalchemy/orm/__init__.py
 index 851efdb..3c33137 100755
 --- a/lib/sqlalchemy/orm/__init__.py
 +++ b/lib/sqlalchemy/orm/__init__.py
 @@ -22,12 +22,16 @@ from sqlalchemy.orm.mapper import (
  from sqlalchemy.orm.interfaces import (
       EXT_CONTINUE,
       EXT_STOP,
 -     InstrumentationManager,
       MapperExtension,
       PropComparator,
       SessionExtension,
       AttributeExtension,
       )
 +
 
 +from sqlalchemy.ext.instrumentation import (
 
 +     InstrumentationManager,
 
 +)
 
 +

ログイン

 python geeknote.py login

Evernote の ID・パスワード・2段階認証のコードを入力。ログイン成功すると以下のコマンドを実行できるようになる。

設定

編集時に emacsclient を使うように設定。

 python geeknote.py settings --editor emacsclient

ノートを新規作成

newnote という題名のノートを作る。

 python geeknote.py create --content WRITE --title newnote

エディタが起動するので編集する。編集を終了すると Evernote 側にノートが書き込まれる。

ノートを見る

newnote という文字列でで検索してノートを見るには以下のようにする。

 python geeknote.py show newnote

ノートを編集

newnote という題名のノートを編集するには以下。

 python geeknote.py edit --note newnote

エディタが起動するので編集する。create と同様閉じると Evernote 側に書き込まれる。

なお Markdown 形式で書くときちんと # は h1、 ## は h2 などに変換される。Geeknote で再編集する際はまたきちんと Markdown 形式で編集できるのでナイス。

ただし Markdown で書くとマークアップ付きのノートになるので Android では編集しにくくなるのでちょっと注意。

[ 9月27日全て ]

2013年10月4日 (金)

今日のさえずり: vim -y 辛い。Emacs 使いには辛すぎる。

2013年10月04日

  • 09:13 近シーズン初長袖。
  • 09:21 今年も CEATEC の季節か(いったことない)。
  • 09:27 外涼しいけれど車内冷房所望。
  • 13:58 レシプロシティ。
  • 15:04 “30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場” http://bit.ly/18WGZRS
  • 16:38 vim -y 辛い。Emacs 使いには辛すぎる。
  • 16:58 「この変更はペケなんだけど,でもそれはお前がペケなんじゃないよって」 / “小飼弾のアルファギークに逢いたい♥:#22 Gitメンテナ 濱野 純|gihyo.jp … 技術評論社” http://bit.ly/1aQTD6m
  • 18:41 上半期のあれ入力したので今日やりきった感ある。
  • 19:18 あがる! (@ 株式会社ミクシィ (mixi, Inc.)) http://4sq.com/GCqxhQ
  • 19:22 最近リアルヨドバシ成分が不足している。
  • 24:43 GQueues 良さそげだなあ。ちょっと試してみたい。
[ 10月4日全て ]

2013年10月11日 (金)

今日のさえずり: さようならアンパンマンパン。メロンパンナパン。

2013年10月11日

  • 08:58 ムズい。 / “IKEA or Death” http://bit.ly/17s7Tyl
  • 09:26 汗ダラダラ流しながらカーディガン着ている男、かわいそう。
  • 12:48 歯医者の定期健診のお知らせはがきに書いてあった日時が予約の時と違うので電話確認。はがきの方が間違いだったので(予定間違えてなくて)よかった。
  • 12:51 あとクレジットカードを1枚退会。Web でできないので電話したら音声ガイドと番号入力だけで一言も喋らずに退会できてしまって拍子抜け。資料請求という形でなくて、電話だけで退会完了してしまった(カードは自分で破棄とのこと)。
  • 13:10 アンパンマンテラス汐留店、2012年9月23日に閉店していただと! さようならアンパンマンパン。メロンパンナパン。
  • 13:13 “■■■■■■、■■■■■■■■■■” http://bit.ly/1cBT2cH
  • 15:41 定期券更新した。
  • 16:29 Teng、確認したらネストしたトランザクションを扱える仕組みになってた。
  • 17:18 “サイバー犯罪防止シンポジウム in Yokohama 2013:横浜市市民局” http://bit.ly/19obosB
  • 19:36 Auto packing the repository for optimum performance. 待ってる(Git の)。
  • 20:27 社内LT大会#6 面白かったらしいので行かなかったの残念。
  • 25:02 寝床用に音のしない USB 充電器が欲しい。
  • 25:13 コイル鳴きっていうワードで探せばレビューにたどり着けそう。
[ 10月11日全て ]

2013年11月15日 (金)

GitHub トレーニングチームから学ぶ Git の内部構造 #githubjp に行ってきた

naney:10867844766

GitHub 主催の「GitHub トレーニングチームから学ぶ Git の内部構造」に行ってきた。会場は Yahoo! JAPAN のある東京ミッドタウン。

内容的には「入門Git」の始めの方で説明されている Git のデータ構造(もはやファイルシステム)について。「Git の内部: グラフ、ハッシュ、圧縮」というのがトピックとのことだったので、漠然と Gitソースコードレベルでの話題になるのかなと思っていたのだけれど、そうでなかった。

新しく知った事:

  • ./git/objects/<..>/<filename> の<..> の2文字はオブジェクト ID の最初の2文字(大量ファイルのディレクトリ分割のためというのはわかっていたけれど、ああ単純に最初の2文字だったんだ)。
  • git fsck でリポジトリの不整合が見つかっても復旧はできない。復旧バックアップからすること。
  • pack という処理がある。詳しくは後で調べる。

オブジェクトが不変でかつ同じ内容ならオブジェクト ID が必ず同一になることを利用して、オブジェクトファイルを共用していることを発表中「ハードリンク」と言ってしまったけれど、多くの人がファイルシステムのハードリンクで実現されていることと勘違いしていた模様。質問を受けて説明しなおしていたけど。

ちなみに実際にファイルシステム上でハードリンクになるのは、ローカルリポジトリを指定して clone した時。大きなリポジトリでもローカル内で clone する分にはストレージ容量的にはあまり気にしなくて大丈夫。

今日のさえずり: 尻に入るノートを調達

2013年11月15日

[ 11月15日全て ]

2013年11月27日 (水)

今日のさえずり: そういえば最近「ユビキタスキャプチャ」ってワード見かけないな

naney:11076445783

2013年11月27日

[ 11月27日全て ]

2013年12月4日 (水)

Git の contrib/diff-highlight で文字列レベルの差分ハイライトと lv (未解決)

Git の contrib/diff-highlight を使って行単位ではなく文字列単位で異なる部分をハイライトしてくれるという記事を教えてもらった。

自分の設定では .gitconfig の color のところは

 [color]
         branch = auto
         diff = auto
         grep = auto
         interactive = auto
         showbranch = auto
         status = auto

となっていて pager 指定は .bashrc で

 if command -v lv > /dev/null; then
   export GIT_PAGER='lv -Ou8 -c'
 fi

と今している。diff-highlight*1 を PATH の通っているところにおいて、

 GIT_PAGER='diff-highlight | less -R' git diff HEAD~..HEAD

とかすると文字列単位で差分が反転色で表示される。

lv だと \x1b[7m で反転させるとそれまでの色属性が落とされてしまうのか、行のそれ以降が黒白/白黒になってしまう。 lv v.4.21*2ソースコードを軽くみたけどちょっとしっかり読まないと対応できなさそうなので、今日は諦め。

diff-highlight は Perl スクリプトなので、こちらでハイライト開始とハイライト終了時のエスケープシーケンスをいじって lv で見栄え良くなるようにするのが簡単でいいかもなあ。

*1Debian GNU/Linux だと /usr/share/doc/git/contrib/diff-highlight/diff-highlight にある

*2(Debian GNU/Linux だと v.4.51.a が入っているので、見たのはちょっと古いバージョンだった模様)

2014年02月05日追記

nkf を通す方法を教えてもらった

[ 12月4日全て ]

2014年1月29日 (水)

git-new-workdir で複数の Git ブランチをチェックアウトして同時に作業する

Git のトピックブランチ開発している時に、他のブランチを同時にチェックアウトしておきたくなる事がままある。

  1. 割り込みで他の人のコードをレビューするため。
  2. 途中で別の不具合見つけたので、別トピックブランチで先に fix するため。
  3. 複数のブランチ上のファイルをつまみ食い的に Emacs で開いて中を見たりしたいため。
  4. 他の人に使い勝手などを確認してもらうため、あるブランチWeb サーバを起動したいため。

いったんテンポラリコミットを作ったり、あるいは stash したりして作業ツリーを保存してチェックアウトしなおして用事を済ませて元に戻すとかはやるのだけれど、ちょっと面倒。3番目のケースは同時にチェックアウトしたいのでこの方法だと駄目だし、4番目のケースだとしばらくそのままにしておかないのでもっと困る。

そのような時はローカルリポジトリから別ディレクトリへ clone して、そちらをサブで使ったりするんだけれど、サブの方でちょっと修正したりした際にローカル間で push/pull とかしなければならなくてこれまた面倒。

なんかいいのないかなと思ったら Git の contrib に git-new-workdir というのがあるのを昨日知った。

 git-new-workdir . ../sub
 あるいは
 git new-workdir . ../sub

で作業ツリーを新しく作れる。/tmp/git/main を /tmp/git/sub に new-workdir すると sub の方の .git の中は

 drwxr-xr-x 3 naney naney 4096  1月 30 00:37 .
 drwxr-xr-x 3 naney naney 4096  1月 30 00:37 ..
 -rw-r--r-- 1 naney naney   23  1月 30 00:37 HEAD
 lrwxrwxrwx 1 naney naney   25  1月 30 00:37 config -> /tmp/git/main/.git/config
 lrwxrwxrwx 1 naney naney   24  1月 30 00:37 hooks -> /tmp/git/main/.git/hooks
 -rw-r--r-- 1 naney naney  104  1月 30 00:37 index
 lrwxrwxrwx 1 naney naney   23  1月 30 00:37 info -> /tmp/git/main/.git/info
 drwxr-xr-x 2 naney naney 4096  1月 30 00:37 logs
 lrwxrwxrwx 1 naney naney   26  1月 30 00:37 objects -> /tmp/git/main/.git/objects
 lrwxrwxrwx 1 naney naney   30  1月 30 00:37 packed-refs -> /tmp/git/main/.git/packed-refs
 lrwxrwxrwx 1 naney naney   23  1月 30 00:37 refs -> /tmp/git/main/.git/refs
 lrwxrwxrwx 1 naney naney   26  1月 30 00:37 remotes -> /tmp/git/main/.git/remotes
 lrwxrwxrwx 1 naney naney   27  1月 30 00:37 rr-cache -> /tmp/git/main/.git/rr-cache
 lrwxrwxrwx 1 naney naney   22  1月 30 00:37 svn -> /tmp/git/main/.git/svn

のような感じで HEAD と index と logs/HEAD 以外はもとのローカルリポジトリへのシンボリックになっている。なので sub での checkout や index の Git 操作など以外は main の方へ反映されるようになっている。わざわざ push/pull しなくて良いのでこれは楽ちん。もちろん作業ツリーはそれぞれ独立しているので、例えばサブの方で Web サーバを起動しておいたり時間のかかるフルテストを走らせておくとかもできる。

ただ複数チェックアウトして作業していると、気がつくと Emacs で違うほうの作業ツリーのファイルを開いて編集していたりして「あれ? 変更したけれどなぜか反映されない……」とかやっちゃうので(実際やった)ちょっと注意が必要ではある。

git-new-workdir は contrib の中(Debian GNU/Linux sid だと /usr/share/doc/git/contrib/workdir/git-new-workdir)にあるみじかいシェルスクリプトなので適当に PATH の通ったところにコピーして実行権限を設定しておけば OK。

Git はこういうところがカワイイよね。

[ 1月29日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.074952s / load averages: 0.46, 0.57, 0.63
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker