nDiki : Git

Git

スポンサード リンク

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日全て ]

2014年2月4日 (火)

Git の diff-highlight で文字列レベルの差分ハイライトと nkf

Git の contrib/diff-highlight を使って行単位ではなく文字列単位で異なる部分をハイライトしてくれるというやつ、日本語のいろいろな文字エンコーディングで使えるように lv と組合せようとしたら駄目だったんだけれど、「nkf + less」だといいと教えてもらったので設定してみた。

.bashrc での GIT_PAGER 設定を以下のように変更。

 if command -v diff-highlight > /dev/null && command -v nkf > /dev/null; then
   export GIT_PAGER='diff-highlight | nkf -w | less -R'
 elif command -v lv > /dev/null; then
   export GIT_PAGER='lv -Ou8 -c'
 fi
[ 2月4日全て ]

2014年2月19日 (水)

いよいよ WiKicker から WikiEngine のコードを抜いて DiKicker のみにする

2002年10月19日から開発を始めてしばらく公開・運用をしていた WikiEngine だけれど最近は WikiEngine そのものは使っていなくて、今はそのコードをベースに作った日記システムDiKicker 部分しか使っていない。DiKicker の方は自分自身で今後も使っていくんだけれど、さすがにいろいろ古いのでそろそろ大改修しようかなと。基盤部分的には

  • Perl 5.005_03Perl 5.6 系との互換処理を捨てる。
  • 文字列処理をバイナリ文字列ベースから(いわゆる UTF8 フラグ界隈的な)テキスト文字列ベースにする。
  • CGI.pm ベースから PSGI ベースへ移行する。
  • 中間管理用のストレージを Berkeley DB から SQLite にする。

などをして今後も使っていけるようにしたい。既に使っていないアプリケーションとしての WikiEngine 部分は移行させていく手間をかける必要はないと思うので、コードを削除していくことにした。WikiForum 立てるなら既にいろいろ他の選択肢があるしね。

CVS での管理もやめて Git 管理に変更。最後の公開 tarball を展開して git init して最初のコミットとし、その後に変更した作業ディレクトリを Git 側の作業ツリーに上乗せしていったんコミット。あらためて最後の公開コードの上に差分を積んでいくつもり。

今日のさえずり: 風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか

2014年02月19日

  • 08:41 “ベル研究所が開発するOS「Plan 9」が新たにGPLv2で公開される | SourceForge.JP Magazine” http://bit.ly/1jPdzy3
  • 09:24 iddy 終了。リンクとか外さないと。 / “【重要なお知らせ】iddyサービス終了のお知らせ | iddy 開発者ブログ” http://bit.ly/1feX5Mf
  • 09:24 7,000円台ぐらいまでで出たら即買ってもいいな。iPad 2 での FaceTime のかわりになる。もし国内で出る事があればもっと高くなるんだろうなぁ。 / “数千円で買えて携帯会社と契約不要の「Skypeスマートフォン...” http://bit.ly/1feX7Uk
  • 09:24 「運営者が飽きた」 / “iddy 終了について補足 | WWW WATCH” http://bit.ly/1m7oLnX
  • 10:35 歌うキーボード ポケット・ミク (大人の科学マガジン特別編集)とな。 http://amzn.to/1bjmkNH
  • 21:25 今作っている機能、テーブル1つで済ませるつもりだったけれど、ゴチャゴチャしてきたのでやっぱり明日分ける。
  • 22:53 “大雨・大用に日本野鳥の会バードウォッチング長靴” http://bit.ly/1cpOp4s
  • 24:29 さてこの Subversion で管理しているコードを Git 管理にするかなととりあえず svn log したら「作業コピーではありません」と出て、あれっと思ってみたら CVS/ というディレクトリが。
  • 24:33 そしてなんでこれ /var/www 以下できちんと動いているのに手動で動かすとモジュール見つからないのって思って風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか。
  • 25:03 “文字列検索コマンド「grep 2.17」リリース | SourceForge.JP Magazine” http://bit.ly/1gVu5sN
  • 25:03 “CSRF対策用トークンの値にセッションIDそのものを使ってもいい時代なんて、そもそも無かった” http://bit.ly/1kXbPTN
[ 2月19日全て ]

2014年2月21日 (金)

今日のさえずり: モンスターストライクのシールが付いているので、ファミ通App NO.013 Android 注文した

2014年02月21日

  • 13:20 お、 MyToodle を Toodledo が手に入れて公式 Android アプリ扱いにしたんだ。
  • 13:31 これで Toodledo + 2Do では実質使えなかったコンテキストが使えるようになるな。「サブタスクを別フォルダに」は入力できるけど、フォルダ別表示だと親タスクのフォルダにしか表示されないのは今後に期待。
  • 13:34 2Do アンインストール
  • 17:48 Git リポジトリの中に Git リポジトリをネストして置いておいてもよしなにしてくれるのかな(submodule にはしたくないケース)。
  • 23:53 モンスターストライクのシールが付いているので、ファミ通App NO.013 Android 注文した。 http://amzn.to/1h5dClG
[ 2月21日全て ]

2014年3月14日 (金)

今日のさえずり: Pageant って Pagent じゃなかった

2014年03月14日

[ 3月14日全て ]

2014年4月2日 (水)

git log で特定の関数の変更履歴を見る

Git でファイル中の特定の範囲の変更履歴を見る -L オプションで、その範囲を正規表現で指定できる。例えば Perl モジュールだと

 git log -L '/sub func_name/',/^}/:lib/Foo/Bar.pm

で lib/Foo/Bar.pm の中の func_name サブルーチン(/関数/メソッド)の変更履歴(sub func_name のある行から、行頭が } の行までの変更履歴)を出力できる。

[ 4月2日全て ]

2014年7月3日 (木)

Samba 経由だと SourceTree やっぱり遅かった

今の環境になってから Git リポジトリブラウザ QGit の X の画面を Windows 7 BOX の方にうまくもってこれなくなってしまったので、たまに tig 使っているのだけれどやっぱりグラフィカルなツリーも見たい。

ということで Windows 7 BOX の方に Atlassian の SourceTree を入れてみた。

見た目綺麗で良さそげなんだけれど、開発環境(Linux)上にある Git リポジトリ/ワークツリーを Samba 経由でブラウズするには更新が重くて予想はしていたけれど無理無理だった(特にリポジトリがとても大きいこともある)。これは OS X 用なのだ。

[ 7月3日全て ]

2014年9月2日 (火)

今日のさえずり: あんちぽくんさんの写真をお土産としてあげたら、ディスプレイに飾っているので申し訳なく思っています

2014年09月02日

  • 07:42 「むだにしてしまった時間が、おしくてならない。」 最後の授業 p.8 http://flic.kr/p/p2koBk
  • 08:24 @cocu_628496 Gitファイルシステムであるということを説明すればOK。
  • 14:35 YAPC::Asia Tokyo 2014 でノベルティでもらったあんちぽくんさんの写真をお土産として新卒エンジニアにあげたら、ディスプレイに飾っているので申し訳なく思っています。 #yapcasia
  • 14:51YAPC::Asia Ramen Challenge Graph” http://bit.ly/Z5jas7
  • 22:08 @cocu_628496 なるほど。 VCS 自体が初めての方だったりするのでしょうか?
  • 22:30 @cocu_628496 そういう層だと、Git の本とか読んで哲学的なとこ知ると一番早そう(時間的余裕があれば)。
[ 9月2日全て ]

2015年5月13日 (水)

レクサー・リサーチ開発同窓会

naney:17034996273

2月の Developers Summit 2015 で zakwa 氏と再会したのをきっかけに、当時一緒に仕事をしていた気が置けないソフトウェア開発者4人で同窓会をすることになった。セッティングしてくれた zakwa 氏ありがとう!

COGS DINING KAGURAZAKA (コグス ダイニング 神楽)

手配してくれたお店は「焼きたてパンとワインのお店」COGS DINING KAGURAZAKA。神楽から路地に入ったところにあるお店で、上品な味の料理で満足だった。店内もうるさくなくて話しやすかったし、たばこを吸っている人もいなかったので快適だった。

ソフトウェア開発

現職のまま続けている1人と、別の場所で働くことになった3人だけれどみなそれぞれソフトウェア開発現場に関わっていて、それぞれの開発スタイルなどについて情報交換したり。

大企業だからしっかりした開発をしているとか、スタートアップだからモダンな開発をしているとかでは必ずしも無いよねという話だった。例えばバージョン管理一つにしてもうまくできていない(やっていない)場合も多いとのこと。当時を振り返ってみると小規模かつ独学の状況ながら、今では普通になってきたプラクティスやツールをその時から実践/活用していたなと自画自賛した。

「書けなくなったホワイトボードマーカーはその場で床に投げ捨て」に共感を持ってもらえていたのが、振り返って当時の自分の一番の成果だな。

退職時に使っていた社内 WikiNaney 謹製のものだったのでその後どうなったのかなとたまに気になっていたのだけれど、ビル管理会社の人に社内サーバの電源を切られたことによりサーバごと死んで闇に葬られたらしい。R.I.P.

その他

同窓会らしく「あのひとは今」的な話をしたり、当時フィルムカメラで撮っていた業務風景のアルバムを持ってきて盛り上がったり。あとはレーシックやドライアイ治療ひぇー的な話題が出たり。あとは展示会の時のレクサー・リサーチポロシャツ制作秘話とか。

そういえば出席はできなかった2013年2月開催の「LEXER設立20周年記念サロン・パーティ」で会社のるぐるロゴの立体置物が配られたと聞いて、あ、欲しかったなーと。

[ 5月13日全て ]

2016年3月6日 (日)

今日のさえずり: ふえる磯野ワカメちゃん!

naney:25547682935

2016年03月06日

[ 3月6日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

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

follow us in feedly

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

月別インデックス
Process Time: 0.063704s / load averages: 0.35, 0.36, 0.38
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker